Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah anda boleh mengira secara langsung sudut mengikut arah jam antara dua vektor dalam kedua-dua dua dan tiga dimensi?

Bagaimanakah anda boleh mengira secara langsung sudut mengikut arah jam antara dua vektor dalam kedua-dua dua dan tiga dimensi?

DDD
DDDasal
2024-12-07 21:33:15360semak imbas

How can you directly compute the clockwise angle between two vectors in both two and three dimensions?

Kaedah Terus untuk Mengira Sudut Arah Jam Antara Vektor

Apabila berurusan dengan vektor dua dimensi, sudut mengikut arah jam boleh dikira terus menggunakan penentu dan produk titik. Produk titik memberikan maklumat tentang kosinus, manakala penentu mendedahkan sinus sudut. Dengan menggunakan fungsi atan2, anda boleh mendapatkan sudut mengikut arah jam seperti berikut:

dot = x1*x2 + y1*y2  # Dot product of [x1, y1] and [x2, y2]
det = x1*y2 - y1*x2  # Determinant
angle = atan2(det, dot)  # Clockwise angle

Perhatikan bahawa orientasi sudut sejajar dengan sistem koordinat. Untuk sistem tangan kanan (x kanan, y ke bawah), sudut mengikut arah jam menghasilkan nilai positif. Membalikkan susunan input menukar tanda sudut.

Dalam tiga dimensi, di mana vektor mungkin terletak di sepanjang satah sewenang-wenangnya, paksi putaran juga sewenang-wenangnya. Lazimnya, sudut dianggap positif, dengan paksi berorientasikan sudut positif. Hasil darab titik antara vektor ternormal kemudiannya boleh menentukan sudut:

dot = x1*x2 + y1*y2 + z1*z2  # Dot product of [x1, y1, z1] and [x2, y2, z2]
lenSq1 = x1*x1 + y1*y1 + z1*z1  # Squared length of vector 1
lenSq2 = x2*x2 + y2*y2 + z2*z2  # Squared length of vector 2
angle = acos(dot/sqrt(lenSq1 * lenSq2))  # Clockwise angle

Dalam kes di mana vektor berada dalam satah yang diketahui, pengiraan 2D yang diubah suai boleh digunakan dengan memasukkan vektor normal satah ke dalam penentu:

dot = x1*x2 + y1*y2 + z1*z2
det = n * (v1 × v2)  # Triple product
angle = atan2(det, dot)

di mana n ialah vektor normal panjang unit.

Pelarasan mungkin perlu untuk memastikan sudut berada dalam julat yang dikehendaki (cth., [0, 360°]). Dengan menambah 2π pada keputusan negatif atau menggunakan atan2(-det, -dot) π, sudut boleh dilaraskan dengan sewajarnya.

Atas ialah kandungan terperinci Bagaimanakah anda boleh mengira secara langsung sudut mengikut arah jam antara dua vektor dalam kedua-dua dua dan tiga dimensi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn