ベクトルAとベクトルBの角度を求める方法を考えてみます.

内積を使って求める

A(ax, ay, az)とB(bx, by, bz)の内積をABとすると,

AB = ax*bx + ay*by + az*bz

です.また,A,Bの角度をθとすると,A,Bはcosを使って

AB = |A|*|B|cosθ

も成り立ちます.よって

|A|*|B|cosθ = ax*bx + ay*by + az*bz

が成り立ち,整理すると

cosθ=(ax*bx + ay*by + az*bz) / (|A|*|B|)

= (ax*bx + ay*by + az*bz) / ( sqr(ax^2 + ay^2 + az^2)*sqr(bx^2 + by^2 + bz^2) )

となります.後はacosを使い,

θ=acos( (ax*bx + ay*by + az*bz) /

(sqr(ax^2 + ay^2 + az^2)*sqr(bx^2 + by^2 + bz^2)) )

となります.

コメント欄

  • programmingの場合は-1〜1の範囲を超える場合があるので注意
    2005-10-31 18:37:32 (月)
  • 精度の問題ですね.補足ありがとうございます
    Naoki_I 2005-11-02 01:13:03 (水)

お名前: