• ベストアンサー

空間座標の角度の求め方

空間座標内の3点A(a1,a2,a3),B(b1,b2,b3),C(c1,c2,c3)で定義される三角形の∠BACを求めたいのですが、どのような方法があるでしょうか。できれば、AからBへ向かう辺を角度ゼロとして、三点の座標を入力するだけで(ベクトルの正規化等を用いず)∠BACを0度~360度の値(ラジアンでもいいです)で返すような式が欲しいです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • minus273
  • ベストアンサー率75% (15/20)
回答No.1

空間座標でも、角度を求めるときは平面座標と同じ次の公式を使えます。 ※AB, ACはベクトル cosθ = (AB・AC) / (|AB|*|AC|) 次のように計算すればいいでしょう。ただし、cosθからθを求める関数(アークコサイン関数)が必要です。 ∠BAC を θ とおきます。 AB = (b1-a1, b2-a2, b3-a3) AC = (c1-a1, c2-a2, c3-a3) |AB| = √((b1-a1)^2 + (b2-a2)^2 + (b3-a3)^2) |AC| = √((c1-a1)^2 + (c2-a2)^2 + (c3-a3)^2) AB・AC = (b1-a1)*(c1-a1) + (b2-a2)*(c2-a2) + (b3-a3)*(c3-a3) cosθ = (AB・AC) / (|AB| * |AC|) θ = cos^(-1)θ ←アークコサイン関数 これを一つの式にまとめれば一発で計算できます。

noname#22806
質問者

補足

さっそくの回答、ありがとうございます。 上記の式が返すθは、0≦θ≦πだと思うのですが、 0≦θ≦πと、π≦θ≦2πの区別は、A,B,Cの座標で判別可能なのでしょうか?

その他の回答 (1)

  • eatern27
  • ベストアンサー率55% (635/1135)
回答No.2

#1さんのような内積を使って「角度」を定義するのが一般的です。ですので、普通は、角度は0°から180°の範囲になります。 2次元平面で360°までの角度が自然に定義できるのは、むしろ、例外です。 3次元空間も含めて、普通は、0°から360°の角度を定義しようとすると、どう頑張っても「不自然」な定義になってしまいます。(それでも、というのであれば、角度の定義を補足してください) ------------------------------------------------ 参考程度。 A(0,0,0),B(1,0,0)とします。 C(0,1,0)の時の∠BACの値 C(0,-1,0)の時の∠BACの値 それぞれいくつになると考えますか? おそらく、答えは「両方とも90°(あるいは270°)」か「一方が90°で他方が270°」のどちらかだと思います。 ・「両方とも90°(あるいは270°)」と考える場合: ∠BAC=270°(あるいは90°)となるような具体例を考えてみてください。 ・「一方が90°で他方が270°」と考える場合: Cがyz平面の単位円をぐるっと一周する(途中で点(0,1,0)と点(0,-1,0)を通ります)時、∠BACがどのように変化するのかを考えてみてください。 角度の範囲を0°から360°で定義しようとすると、こういう変なことになるので、「不自然」と書きました。

noname#22806
質問者

お礼

ありがとうございました、解決です!