วาดวงรีด้วย 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 นั่นเอง

การสร้างวงกลมด้วย MATLAB

เห็นมีคำค้นการสร้างวงกลมด้วย MATLAB ไม่ทราบว่าคนค้นได้คำตอบหรือยัง ก็ถือ
โอกาสเขียนวิธีการไว้ตรงนี้เลย เผื่อว่าคนที่ค้นจะกลับมาอีกแล้วจะได้คำตอบ

ว่ากันตามตรงการสร้างวงกลมด้วย MATLAB ถือเป็นปัญหาเส้นผมบังภูเขานะครับ
สมการวงกลมนั้นมีลักษณะดังนี้

x^2+y^2 = r^2

โดยที่ r คือรัศมีของวงกลม ถ้าผู้ต้องการวาดวงกลมด้วย MATLAB เอาเส้นผมออก
ก็จะพบว่าจริง ๆ แล้วเราสามารถเขียนสมการข้างต้นได้ดังนี้

r\sin^2\theta + r\cos^2\theta = r

โดยให้ค่าบนแกน y คือ r\sin\theta  และค่าบนแกน x คือ r\cos\theta
แค่นี้เราก็สามารถนำมาสร้างคำสั่งของ MATLAB ได้แล้วง่าย ๆ ดังนี้

theta = 0:0.1:2*pi;
r = 1;
y = r*sin(theta);
x = r*cos(theta);
plot(x,y);

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