ภาคตัดกรวย (Conics) ด้วยภาษา Python ตอน Parabola

จากตอนที่แล้ว ได้ว่าถึงการใช้ matplotlib ในการวาดรูปด้วยสมการวงกลมไปแล้ว มาตอนนี้จะกล่าวถึงรูปทรงแบบ Parabola เป็นรูปทรงหนึ่งที่พบเห็นได้ในชีวิตประจำวันทั้งที่มนุษย์สร้างขึ้นและจากธรรมชาติ จากภาพจะเห็นว่าลำน้ำมีการเคลื่อนที่แบบเส้นโค้งที่เรียกว่า Parabola




นิยามของ Parabola คือ เซตของจุดที่อยู่ห่างจากจุดคงที่จุดหนึ่งและเส้นตรงเส้นหนึ่งเป็นระยะทางเท่ากัน [1] และจาก [2] ทำให้ทราบว่าสมการทั่วไปของ parabola คือ

1. Vertical axis และ focus คือ (0,a)

x 2 = 4 a y


2. Horizontal axis และ focus คือ (a,0)
y 2 = 4 a x



เมื่อ  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 มีเครื่องหมายเป็น + (สีเขียว) และเมื่อเป็น - (สีแดง)

การ 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

ความคิดเห็น