Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah anda mengira sudut mengikut arah jam antara dua vektor secara langsung?

Bagaimanakah anda mengira sudut mengikut arah jam antara dua vektor secara langsung?

Mary-Kate Olsen
Lepaskan: 2024-11-14 16:19:02
asal
335 orang telah melayarinya

How do you calculate clockwise angles between two vectors directly?

Mengira Sudut Mengikut Jam Secara Terus

Mengira sudut mengikut arah jam antara dua vektor selalunya ditangani menggunakan hasil darab titik, yang menentukan sudut dalam (0 -180 darjah). Walau bagaimanapun, jika anda lebih suka kaedah langsung, berikut ialah langkah yang perlu dipertimbangkan:

Kes 2D

Sama seperti produk titik mengukur kosinus sudut, penentu memberikan sinus sudut. Sudut mengikut arah jam boleh dikira sebagai:

dot = x1*x2 + y1*y2  # Dot product between [x1, y1] and [x2, y2]
det = x1*y2 - y1*x2  # Determinant
angle = atan2(det, dot)  # atan2(y, x) or atan2(sin, cos)
Salin selepas log masuk

Orientasi sudut sejajar dengan sistem koordinat, dengan tanda positif yang menunjukkan sudut mengikut arah jam. Menukar input menukar orientasi dan seterusnya tanda.

Kes 3D

Untuk vektor 3D, kedua-dua vektor mentakrifkan paksi putaran berserenjang dengan kedua-duanya. Oleh kerana paksi ini tidak mempunyai orientasi tetap, sudut arah putaran tidak boleh ditentukan secara unik. Konvensyen biasa melibatkan mengorientasikan paksi untuk menghasilkan sudut positif. Dalam senario ini, hasil darab titik bagi vektor ternormal sudah memadai:

dot = x1*x2 + y1*y2 + z1*z2  # Between [x1, y1, z1] and [x2, y2, z2]
lenSq1 = x1*x1 + y1*y1 + z1*z1
lenSq2 = x2*x2 + y2*y2 + z2*z2
angle = acos(dot/sqrt(lenSq1 * lenSq2))
Salin selepas log masuk

Satah dalam 3D

Jika vektor terletak dalam satah dengan vektor normal yang diketahui n, paksi putarannya terletak di sepanjang n. Menyesuaikan pengiraan 2D sambil menggabungkan n memberikan sudut mengikut arah jam:

dot = x1*x2 + y1*y2 + z1*z2
det = x1*y2*zn + x2*yn*z1 + xn*y1*z2 - z1*y2*xn - z2*yn*x1 - zn*y1*x2
angle = atan2(det, dot)
Salin selepas log masuk

Pastikan n dinormalkan untuk pengiraan ini.

Julat 0-360 Darjah

Banyak pelaksanaan atan2 mengembalikan sudut dalam julat [-180°, 180°]. Untuk mendapatkan sudut positif dalam julat [0°, 360°], tambah 2π pada sebarang keputusan negatif.

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

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan