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?
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!