Si l'angle formé par $ \ vec {a} = (a_1, a_2), \ vec {b} = (b_1, b_2) $, qui n'est pas $ \ vec {0} $, est $ \ theta $, alors
\begin{align}
\cos\theta &= \frac{\vec{a}\cdot\vec{b}}{|\vec{a}||\vec{b}|} \\
&=\frac{a_1 b_1 + a_2 b_2}{\sqrt{a_1^2 + a_2^2}\sqrt{b_1^2 + b_2^2}}
\end{align}
Si le cosinus inverse (arc cosinus) de cos $ \ theta $ obtenu ici est obtenu, $ \ theta $ peut être obtenu.
func angleBetween(_ vec1: simd_float3, and vec2: simd_float3) -> Float {
let cosT = (vec1.x * vec2.x + vec1.z * vec2.z) / (sqrt(pow(vec1.x, 2) +
pow(vec1.z, 2)) * sqrt(pow(vec2.x, 2) + pow(vec2.z, 2)))
let deg = acos(cosT) * 180 / Float.pi
return deg
}
let v1 = simd_float3(20, 0, 20)
let v2 = simd_float3(0, 0, 20)
let angle = angleBetween(v1, and: v2)
print(angle) //45 degrés
Recommended Posts