タグ

ブックマーク / www5d.biglobe.ne.jp/~noocyte (2)

  • 3次元の回転 (原点を通る任意方向回転軸,座標系に依存しないベクトル表現と回転行列)

    O:原点 OA:回転軸 P:回転前の点の位置 P':回転後の点の位置 Q:点 P を含む回転面と回転軸の交点 a:回転軸の方向・向きを表す単位ベクトル θ:回転角 回転方向は,座標系が右手系ならば a に対して右ネジの向き,左手系ならば左ネジの向きとする. p ≡ O→P p' ≡ O→P' u ≡ Q→P v ≡ a × u (u を +90°回転させたベクトル) 注意:右手系と左手系では外積の向きの定義が逆になる. O→Q は単位ベクトル a に対する p の平行成分,u は垂直成分なので, ……………………………………… (2.2.1) ………………… (2.2.2) v は定義より, …………………(2.2.3) a⊥u かつ |a|=1 なので,|u|=|v| である点に注意. 以上と u⊥v であることを考慮すると,回転後の位置 p' は2次元の回転の式を使って次のように書ける

  • 3点の座標から簡単に角度と回転方向を求める.(2・3・N次元,外積を用いる方法)

    S ≡ (Px - Cx) * (Qy - Cy) - (Py - Cy) * (Qx - Cx) とする.S>0 なら左回り,S<0 なら右回り,S=0 ならば C,P,Q は一直線上にある.(注) なお,この判別方法は,CP と CQ が同じ長さである必要はない. θを求めたい場合はこちらへ. この問題を見て,逆三角関数 tan-1 (C言語では atan() や atan2()) を使って CP と CQ の角度をそれぞれ求め, 両者を比較しようと考えた方が多いのではないでしょうか. しかしこの問題では,角度そのものではなく角度差の符号を求めればよいので, 逆三角関数を使う方法よりも簡単で優れた,外積を使う方法を紹介します. 2つの2次元ベクトル A=(Ax, Ay), B=(Bx, By) の外積を次のように定義する. A × B ≡ Ax * By - Ay * Bx ここで O

    3点の座標から簡単に角度と回転方向を求める.(2・3・N次元,外積を用いる方法)
  • 1