Bagaimana Mengira Secara Terus Sudut Mengikut Jam Antara Dua Vektor?

Susan Sarandon
Lepaskan: 2024-11-23 17:24:19
asal
854 orang telah melayarinya

How to Directly Calculate the Clockwise Angle Between Two Vectors?

Pengiraan Terus Sudut Arah Jam Antara Vektor

Secara tradisinya, pengiraan sudut antara vektor melibatkan penggunaan hasil darab titik, yang menghasilkan sudut dalam antara 0° dan 180°. Walau bagaimanapun, pendekatan ini memerlukan penggunaan pernyataan bersyarat untuk menentukan sudut mengikut arah jam sebenar.

Kes Dua Dimensi

Dalam 2D, pendekatan mudah wujud:

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

Penentuan adalah berkadar dengan sinus sudut, melengkapi titik hubungan produk dengan kosinus. Orientasi sudut sejajar dengan sistem koordinat, dengan sudut positif menunjukkan putaran mengikut arah jam dalam sistem tangan kiri (cth., grafik komputer). Menukar input menukar tanda sudut.

Kes Tiga Dimensi

Dalam 3D, sudut putaran ditakrifkan oleh paksi yang berserenjang dengan kedua-dua vektor yang terlibat. Satu konvensyen memberikan sudut positif kepada putaran yang menjajarkan paksi dengan sudut positif. Menggunakan konvensyen ini:

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

Pesawat Terbenam dalam 3D

Satu lagi kes istimewa berlaku apabila vektor terletak dalam satah dengan vektor normal _n_ yang diketahui. Menyesuaikan pengiraan 2D, kami mengambil kira _n_:

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

Perhatikan bahawa n mesti mempunyai panjang unit.

Borang Produk Tiga Tiga

Penentuan juga boleh dinyatakan sebagai tiga kali ganda produk:

det = n · (v1 × v2)
Salin selepas log masuk

Formula ini menyediakan perspektif alternatif, dengan hasil silang adalah berkadar dengan sinus sudut dan terletak berserenjang dengan satah, dengan berkesan menjajarkan dengan _n_. Produk titik kemudian mengukur panjang vektor yang terhasil dengan tanda yang betul.

Julat 0° – 360°

Kebanyakan atan2 pelaksanaan kembali sudut dalam julat [-π, π] radian atau [-180°, 180°] darjah. Untuk sudut positif [0°, 360°], tambahkan 2π pada sebarang keputusan negatif. Sebagai alternatif, atan2(-det, -dot) π boleh digunakan tanpa syarat untuk sudut positif.

Atas ialah kandungan terperinci Bagaimana Mengira Secara Terus Sudut Mengikut Jam Antara Dua Vektor?. 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