Maths - Angle between vectors

สวัสดีค่า 

        จากเมื่อวานที่ได้ลองทำขับรถดู  ปรากฎว่ามีปัญหาภาพมันตลกๆ คงต้องหาวิธี rotation
แล้วจาทำไงดีหว่า ไม่ค่อยได้เรียนเลขมาเลยอะ

จะหามุมระหว่างเวคเตอร์ 2 ตัว
angle = acos(v1•v2) ไม่รู้ว่าจะอันนี้จะได้เปล่า...
แต่อย่าลืมว่า เทียบกับจุด origin นะ

หรือไม่ก้อมีการหามุมอีกแบบนึง ดังนี้นะค่ะ

angle of 2 relative to 1= atan2(v2.y,v2.x) - atan2(v1.y,v1.x)

เพราะฉะนั้น ถ้าจะแก้ปัญหาจากตัวอย่างที่อยากได้ ในการหาค่ามุมที่รถจะหักเลี้ยวนั้น
น่าจะเป็น atan (อ่านว่า Arc Tan) (หรือเปล่า?)

เดี๋ยวลองมั่วดูก่อนนะค่ะ ...

We can calculate r from:

r2 = x2 + y2

and from:

tan() = y / x

which gives:

= atan(y / x)

.....

angle (degrees) sin(angle) cos(angle) v1•v2 v1 x v2
0 0 1 1 0,0,0
90 1 0 0 unit len
180 0 -1 -1 0,0,0
270 -1 0 0 unit len
ตารางค่ามุม

....
....

การวัดมุม

ปกติเราจะคุ้นเคยโดยมีการวัดในหน่วยองศา แต่ใน XNA นี้จะมีการ pass ค่าพารามิเตอร์เป็น radians อะนะ
โดยการแปลงหน่วนนั้น ทำได้ดังนี้ => radians ไปองศา degrees ก้อเอา 180/PI ไปคูนอะนะ

 
ภาพแสดง method draw ที่ overload มา

เพราะฉะนั้น 1 radain นี้ก้อคงประมาณ = 57 ก่าๆ องศานะ  (จาก180/PI)

เฮือก จบแระค่ะ บายค่ะ
งุงิ งุงิ 


เอกสารอ้างอิง [1] Angles in 2D
                     [2] Angle between vectors
                     [3] atan

edit @ 12 Dec 2007 23:42:25 by xnanoob

Comment



smilebig smileopen-mounthed smileconfused smilesad smileangry smiletonguequestionembarrassedsurprised smilewinkdouble winkcry



งานนี้เครียดเลย sad smile