ฉันจะขยายความคิดเห็นของ TravisG เล็กน้อยและให้คำตอบอีกครั้งใช้ประโยชน์จากข้อเท็จจริงที่ว่าคำถามของคุณมีแท็ก "2D"
คุณสามารถหามุมระหว่างเวกเตอร์สองตัวโดยใช้ผลิตภัณฑ์ดอท แต่คุณไม่สามารถหามุมที่เซ็นชื่อระหว่างสองเวกเตอร์ที่ใช้มันได้ อีกวิธีหนึ่งถ้าคุณต้องการเปลี่ยนตัวละครเมื่อเวลาผ่านไปหนึ่งจุดผลิตภัณฑ์จุดจะทำให้คุณหันไปมาก แต่ไม่ใช่ทิศทาง อย่างไรก็ตามมีสูตรง่าย ๆ อีกสูตรหนึ่งซึ่งมีประโยชน์มากเมื่อรวมกับผลิตภัณฑ์ดอท คุณไม่เพียง แต่มี
dot(A,B) = |A| * |B| * cos(angle)
นอกจากนี้คุณยังสามารถใช้สูตรอื่น (ชื่อฉันทำขึ้นเพื่อความถูกต้องทางการเมือง):
pseudoCross(A,B) = |A| * |B| * sin(angle)
โดยที่ถ้า A = (a, b), B = (x, y) ดังนั้น pseudoCross (A, B) จะถูกกำหนดให้เป็นองค์ประกอบที่สามของผลิตภัณฑ์ข้าม (a, b, 0) x (x, y, 0 ) ในคำอื่น ๆ :
a*x+b*y = |A| * |B| * cos(angle)
-b*x+a*y = |A| * |B| * sin(angle)
มุมที่เซ็นชื่อเต็มคือangle=atanfull(-b*x+a*y,a*x+b*y)
(ฟังก์ชัน atanfull หรือ atan2 ยกโทษให้คุณถ้าคุณผ่านค่าที่ไม่ได้ทำให้เป็นมาตรฐาน) หาก A และ B ถูกทำให้เป็นมาตรฐานนั่นคือถ้า|A|=|B|=1
สิ่งเหล่านี้เป็นเพียง:
a*x+b*y = cos(angle)
-b*x+a*y = sin(angle)
สำหรับคำอธิบายที่ลึกกว่าโปรดทราบว่าสมการข้างต้นสามารถแสดงได้โดยสมการเมทริกซ์:
[ a,b] [x] [cos(angle)]
[-b,a] * [y] = [sin(angle)]
แต่ A และ B สามารถแสดงเป็นa=cos(ang1)
, b=sin(ang1)
สำหรับค่าบางอย่างang1
(ไม่angle
) ดังนั้นเมทริกซ์ทางซ้ายคือเมทริกซ์การหมุนที่หมุนเวกเตอร์ (x, y) ด้วยจำนวน -ang1 นี่เทียบเท่ากับการเปลี่ยนเป็นกรอบอ้างอิงโดยที่เวกเตอร์หน่วย "A" ถือเป็นเวกเตอร์ / แกน (1,0)! ดังนั้นเพียงแค่วาดวงกลมหน่วย / สามเหลี่ยมมุมฉากในกรอบนี้คุณจะเห็นได้ว่าทำไมเวกเตอร์ที่ได้ของผลิตภัณฑ์นั้นคืออะไร (cos (มุม), sin (มุม))
ถ้าคุณเขียน (a, b) และ (x, y) ในรูปแบบขั้วและใช้สูตรผลต่างมุม cos(l)*cos(m)+sin(l)*sin(m)=cos(l-m)
และsin(l)*cos(m)-cos(l)*sin(m)=sin(l-m)
คุณแสดงว่าไซน์ / โคไซน์ได้รับจากผลิตภัณฑ์นี้เนื่องจาก (lm) = angle อีกวิธีหนึ่งอัตลักษณ์เหล่านั้นสามารถนำมาใช้เพื่อดูว่าทำไมผลิตภัณฑ์เชิงเส้นที่ระบุด้านบนหมุนเวกเตอร์
อัตลักษณ์เหล่านี้ทั้งหมดหมายความว่าคุณไม่ค่อยต้องการมุม เนื่องจากมุมอาจเป็นสิ่งแปลก ๆ - เรเดียน / องศาอนุสัญญาสำหรับอินเวอร์สไซน์ / โคไซน์ความจริงที่ว่าพวกเขาทำซ้ำทุก ๆ 2 * pi - นี่จะมีประโยชน์มากขึ้นและช่วยให้คุณประหยัดได้มากถ้า "ตรรกะ (<180)"