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)
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))
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)
Perhatikan bahawa n mesti mempunyai panjang unit.
Borang Produk Tiga Tiga
Penentuan juga boleh dinyatakan sebagai tiga kali ganda produk:
det = n · (v1 × v2)
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!