มุมระหว่างเวคเตอร์ angle xna
posted on 12 Dec 2007 02:41 by xnanoob in Math, Tutorials
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








งานนี้เครียดเลย
#1 By หุ่นดีกันเถอะ on 2007-12-14 00:55