LoginSignup
1
2

More than 3 years have passed since last update.

2つのベクトルのなす角度を求める

Posted at

解説

$\vec{0}$ではないベクトル $\vec{a} =(a_1,a_2), \vec{b}=(b_1,b_2)$ のなす角度を$\theta$とすると次が成り立つ。

\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}

ここで求められたcos$\theta$の逆余弦(アークコサイン)を求めれば$\theta$が求まる。

コード

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度
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2