จากตอนที่แล้ว ได้ว่าถึงการใช้ matplotlib ในการวาดรูปด้วยสมการวงกลมไปแล้ว มาตอนนี้จะกล่าวถึงรูปทรงแบบ Parabola เป็นรูปทรงหนึ่งที่พบเห็นได้ในชีวิตประจำวันทั้งที่มนุษย์สร้างขึ้นและจากธรรมชาติ จากภาพจะเห็นว่าลำน้ำมีการเคลื่อนที่แบบเส้นโค้งที่เรียกว่า Parabola
นิยามของ Parabola คือ เซตของจุดที่อยู่ห่างจากจุดคงที่จุดหนึ่งและเส้นตรงเส้นหนึ่งเป็นระยะทางเท่ากัน [1] และจาก [2] ทำให้ทราบว่าสมการทั่วไปของ parabola คือ
1. Vertical axis และ focus คือ (0,a)
2. Horizontal axis และ focus คือ (a,0)
เมื่อ a คือ ระยะห่างจากจุด focus ไปจุด (0,0) และ a > 0
Python script
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-20,20,400)
y = np.linspace(-20,20,400)
x,y = np.meshgrid(x,y)
a = 5
r = 0
ax = plt.axes()
ax.grid()
ax.axis('equal')
ax.contour(x,y, (y**2 - 4*a*x), [r], colors='green')
plt.show()
คำอธิบาย
ชุดคำสั่งชุดนี้ใช้สมการแบบ vertical axis โดยกำหนดค่า a เป็น 5
ทดลองเปลี่ยนแปลงค่า parameter
1. สร้างสมการแบบ horizontal axis
ax.contour(x,y, (x**2 - 4*a*y), [r], colors='green')
2. เปลี่ยนค่าของ a
a = 5
ax.contour(x,y,
x**2-4*a*y,
[r],colors='green'
)
a = 1
ax.contour(x,y,
x**2-4*a*y,
[r],colors='red'
)
จากแสดงผลของค่า a เมื่อมีค่ามาก(สีเขียว) และเมื่อมีค่าน้อย (สีแดง)
3. เครื่องหมายข้างหน้า a
a = 5
ax.contour(x,y,
x**2-4*a*y,
[r],colors='green'
)
a = -5
ax.contour(x,y,
x**2-4*a*y,
[r],colors='red'
)
เมื่อ a มีเครื่องหมายเป็น + (สีเขียว) และเมื่อเป็น - (สีแดง)
4. การหมุน (rotation) อ้างอิงการทำ shape rotation [3]
theta = [np.pi/4]
a = 1
ax.contour(x*np.cos(theta)-y*np.sin(theta),x*np.sin(theta)+y*np.cos(theta),
y**2-4*a*x,
[r],colors='green'
)
5. การย้ายตำแหน่ง (translation) [4]
สมมุติว่าต้องการย้ายตำแหน่งไปแนวนอนไปทางขวา 5 หน่วยและขึ้นในแนวตั้ง 5 หน่วย จะได้ translation vector เป็น
ดังนั้นจุดทุกจุดจะถูกบวกด้วย translation vector รวมทั้งจุด focus และ directrix ด้วย
a = 5
tx = [5]
ty = [5]
ax.contour(x+tx,y+ty,
y**2-4*a*x,
[r],colors='green'
)
ax.plot(a+tx[0],ty[0],'.')
ax.axvline(-a+tx[0])
plt.show()
การ plot จุด focus และเส้น directrix
กรณี vertical axis
ถ้า focus คือ (0,a) เส้น directrix คือ y = -aถ้า focus คือ (0,-a) เส้น directrix คือ y = a
a = 5
ax.contour(x,y,
x**2-4*a*y,
[r],colors='green'
)
ax.plot(0,a,'.') # focus point (0,a)
ax.axhline(-a) # directrix y = -a
กรณี horizontal axis
ถ้า focus คือ (a,0) เส้น directrix คือ x = -aถ้า focus คือ (-a,0) เส้น directrix คือ x = a
a = 5
ax.contour(x,y,
y**2-4*a*x,
[r],colors='green'
)
ax.plot(a,0,'.') # focus point (a,0)
ax.axvline(-a) # directrix x = -a
เอกสารอ้างอิง
[1] https://www.mathsisfun.com/geometry/parabola.html
[2] https://somchaisom.blogspot.com/2018/03/computer-graphics-parabola-equation.html#more
[3] https://somchaisom.blogspot.com/2018/03/computer-graphics-2-d-rotation.html#more
[4] https://somchaisom.blogspot.com/2018/03/computer-graphics-2d-translation.html
Sign up here with your email
ConversionConversion EmoticonEmoticon