Friday, July 17, 2020

การหาจุดตัดระหว่างเส้นตรงและวงกลม MATLAB version

จริงๆแล้ว MATLAB มันมีชุดคำสั่งในการหาจุดตัดนี้อยู่นะ มันคือ linecirc ตัวอย่างเช่น

slope = 0;
intercpt = 0.3;
centerx = 0;
centery = 0;
radius = 0.5;
[xout,yout] = linecirc(slope,intercpt,centerx,centery,radius)

คำตอบที่ได้คือ
xout =

    0.4000   -0.4000


yout =

    0.3000    0.3000


ส่วนค่าในแต่ละช่องคืออะไร เราจะมารีวิวสมการเส้นตรงและสมการวงกลมกันวันนี้

ก่อนอื่น สมการวงกลม

\[ (x-u)^2 + (y-v)^2 = r^2\]

โดยที่ (u,v) คือตำแหน่งจุดศูนย์กลางวงกลม แทนด้วย centerx,centery ใน MATLAB code ข้างบน
r คือ รัศมีวงกลม แทนด้วย radius ในโค้ดด้านบน

ส่วนสมการเส้นตรงแทนด้วย

\[ y = mx+c\]

โดย m คือความชันของกราฟเส้นตรง และ c คือจุดตัดแกน y

ตำแหน่งที่เส้นตรงตัดกับวงกลม คือตำแหน่งที่ x,y ของสมการวงกลม มีค่าเท่ากับ x,y ของสมการเส้นตรง ดังนั้นเราจึงจัดเรียงสมการใหม่ โดยการแทนค่า y ของสมการเส้นตรงในสมการวงกลม จะได้สมการดังนี้
\[ (x-u)^2 + (mx+c-v)^2 = r^2\]
ทีนี้ก็จัดเรียงสมการใหม่เพื่อที่จะหาค่า x ก่อนอื่นกระจายตัวแปร polynomial ก่อน

\[ x^2 - 2xu + u^2 + (mx)^2 +2mx(c-v) + (c-v)^2 = r^2\] \[ x^2 - 2xu + u^2 + (mx)^2 +2mxc-2mxv + c^2 -2cv + v^2 = r^2\] เสร็จแล้วก็จัดกลุ่มใหม่เพื่อให้ดูง่าย \[ [x^2+ (mx)^2] +[-2xu+2mxc-2mxv] + [u^2 + c^2 -2cv + v^2 - r^2] = 0\] \[ [1+m]x^2 +[-2u+2mc-2mv]x + [u^2 + c^2 -2cv + v^2 - r^2] = 0\] หลังจากนั้นก็หาค่า x โดยใช้คำสั่ง roots ใน MATLAB จะได้ดังนี้
m = 0;
c = 0.3;
u = 0;
v = 0;
r = 0.5;

a1 = (1+m)^2;
a2 = -2*u + 2*m*c - 2*m*v;
a3 = u^2 + c^2 - 2*c*v + v^2 - r^2;
x = roots([a1,a2,a3])';

คำตอบ x ที่ออกมาคือ
x =

    0.4000   -0.4000

เหมือนกันกับข้างบนเลย ทีนี้พอเราได้ค่า x แล้วก็สบายล่ะ เอาค่าไปแทนในสมการเส้นตรงหาค่า y ได้เลย

y = m.*x+c
คำตอบที่ได้คือ
y =

    0.3000    0.3000
ที่วันนี้มาทำวิธีmanualให้ดูแทนที่จะใช้คำสั่ง linecirc เพราะว่าถ้าเรารู้วิธีการคิดเราจะสามารถนำไปต่อยอดได้ โดยเฉพาะคำสั่งของ MATLAB นี้ ไม่ครอบคลุมถึงรูป 3 มิติ เพราะงั้นรู้ที่มาไว้ไม่เสียหาย

No comments:

Post a Comment