Pythonで,図のように3次元空間上の3点の座標から片側の角度(図中の∠B)のみを求める方法を模索しています.
具体的に説明します.
図のように,点ABCの座標がわかっており,3点が点Bにおいてなす角度を求めたいと思っております.
このとき,3点が点Bにおいてなす角度は,図のように内側と外側の2種類の角度があると思います.
このとき,片方の角度を∠B,もう片方を∠B’とします.
点ABCがそれぞれ移動するとき,変化する∠Bの角度をを0°~360°まで求めたいのですが,私が実装した方法(以下に記載)ですと,0°~180°の範囲でしか角度を求めることが出来ません.(常に鋭角が計算されるため,180°を超えることがありません.)
3次元空間上において,移動する3点がなす角の片側のみを0°~360°の範囲で計測するには,どのように実装すれば良いのでしょうか?
(∠Bと∠B’のうち,最初に180°より小さい方の角度を∠Bとして,0°~360°の範囲で変化する∠Bの角度を常に追跡し続けるイメージです)
以下に,私が実装した角度の算出方法を載せます.
python
1 2 a = np.array([0,1,2]) 3 b = np.array([10,20,30]) 4 c = np.array([5,7,9]) 5 6 vec_a = a - b 7 vec_c = c - b 8 length_vec_a = np.linalg.norm(vec_a) 9 length_vec_c = np.linalg.norm(vec_c) 10 inner_product = np.inner(vec_a, vec_c) 11 degree = np.rad2deg(np.arccos(inner_product / (length_vec_a * length_vec_c))) 12