วาดวงรีด้วย MATLAB

จากความตอนที่แล้ว

ขั้นต่อไปคงเป็นการสร้างวงรี จริง ๆ แล้วเราเรียนเรื่องวงรีจากเรขาคณิตวิเคราะห์ในบทที่ว่าด้วย
ภาคตัดกรวยที่มี วงกลม วงรี พาราโบลา ไฮเปอร์โบลา ยากสุด ๆ กลับไปดูในแบบเรียนเอาเอง
นะครับ หรือที่ Conic Section Gallery

การวาดวงรีด้วย MATLAB สำหรับผมแล้วผมจะไม่ใช้เรขาคณิตวิเคราะห์ เพราะผมเป็นวิศวกรที่
ไม่เขียนแบบด้วยไม้บรรทัดและวงเวียนอีกแล้ว ผมจะวาดแบบง่ายโดยให้ค่าบนแกน y = r_1\sin\theta และค่าบนแกน x = r_2\cos\theta ซึ่งคราวนี้ค่า r_1 และ r_2
จะมีขนาดไม่เท่ากัน

รหัสต้นของ MATLAB ที่ดูดีขึ้นก็จะเป็น

theta = linspace(0,2*pi,100);
r = 1;
x = 2*r*cos(theta);
y = r*sin(theta);
axis equal
axis([-3,3,-3,3]);

el1

ทีนี้ถ้าเราต้องการหมุนวงรีจะทำอย่างไรครับ ถ้าจะบวกองศาที่หมุนไปดื้อ ๆ นั้นจะไม่
เป็นผล เพราะหมุนแกนตอนแกนตั้งมันก็หมุนด้วย ด้วยความสัตย์จริงผมต้องไปค้นหนังสือ
พีชคณิตเชิงเส้น เรื่อง orthogonal basis มาอ่าน ได้ความว่าเราสามารถใช้ orthogonal
basis มาหมุนวงรีได้ ดังนี้

g= U_\theta u, \qquad U_\theta = \begin{bmatrix}\cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix}

โดยที่ u = [x \quad y]^T คือค่าบนแกนนอนและแกนตั้งตามลำดับ ก็จับมาคูณ
กันดื้อ ๆ เลยครับ ได้รหัสต้นดังนี้

ar = 30*pi/180;
Uth = [cos(ar) -sin(ar); sin(ar)  cos(ar)];
g = Uth*[x ; y ];
plot(g(1,:),g(2,:));
axis([-3,3,-3,3]);

el2

ก็จะได้รูปวงรีที่เอียงทำมุม 30 องศากับแกนนอนตามต้องการ

อนึ่ง เพื่อให้ได้อะไรบ้าง U_\theta จะทำการเปลี่ยน orthogonal basis
จาก e_1 = [1 \quad 0]^T และ e_2 = [0\quad 1]^T ไปเป็น e_1 = [\cos\theta \quad \sin\theta]^T
และ e_2 = [-\sin\theta \quad \cos\theta]^T นั่นเอง