Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mengira Sudut Arah Jam Antara Dua Vektor: Melangkaui Produk Titik?

Bagaimana untuk Mengira Sudut Arah Jam Antara Dua Vektor: Melangkaui Produk Titik?

DDD
Lepaskan: 2024-11-19 04:34:02
asal
633 orang telah melayarinya

How to Calculate the Clockwise Angle Between Two Vectors: Beyond the Dot Product?

Mengira Sudut Mengikut Jam Antara Vektor: Melangkaui Pendekatan Klasik

Kaedah klasik untuk mengira sudut antara dua vektor bergantung pada hasil darab titik, yang hanya menyediakan sudut dalam (0-180 darjah). Untuk mendapatkan sudut mengikut arah jam yang dikehendaki secara langsung, kami meneroka pendekatan alternatif yang memanfaatkan penentu.

Vektor 2D

Dalam domain 2D, penentu mewakili nilai yang berkadar dengan sinus sudut. Oleh itu, kita boleh mengira sudut menggunakan:

dot = x1*x2 + y1*y2 
det = x1*y2 - y1*x2 
angle = atan2(det, dot)
Salin selepas log masuk

Sudut yang terhasil sejajar dengan orientasi sistem koordinat, menghasilkan nilai positif untuk putaran mengikut arah jam. Menukar vektor input membalikkan tanda.

Vektor 3D

Untuk vektor 3D, di mana paksi putaran kekal tidak ditentukan, kami biasanya memilih sudut positif. Produk titik ternormal memberikan ukuran yang sesuai:

dot = x1*x2 + y1*y2 + z1*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 Terbenam dalam 3D

Jika vektor terletak dalam satah dengan vektor normal yang diketahui n, kita boleh manfaatkan maklumat ini untuk memperhalusi pengiraan:

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

Julat 0 – 360°

Pelaksanaan atan2 biasa mengembalikan sudut dalam julat [-π, π] radian. Untuk mendapatkan sudut dalam julat [0, 2π] radian yang dikehendaki, tambahkan 2π kepada keputusan negatif. Sebagai alternatif, gunakan atan2(-det, -dot) π tanpa syarat.

Atas ialah kandungan terperinci Bagaimana untuk Mengira Sudut Arah Jam Antara Dua Vektor: Melangkaui Produk Titik?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan