タグ

ブックマーク / www5d.biglobe.ne.jp/~noocyte (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次元,外積を用いる方法)
  • 幾何学・CG のアルゴリズム集

    作成中 スマートフォン (AndroidiPhone) など最近のモバイル機器には3軸地磁気センサ (電子コンパス) と3軸加速度センサ (モーションセンサ) を搭載しているものがある.これらを用いると,基準となる3方向 (水平磁北方向,水平東方向,鉛直方向) をそれなりの精度で求めることができ, さらにその結果を用いて端末の姿勢 (向いている方向) や方位角 (azimuth), 傾き角 (roll,pitch) を計算することができる. 余談だが,Android のマニュアルにある azimuth の定義はおかしい (はっきり言って間違っている) のでセンサアプリ開発者は注意. この定義によると水平面に対する画面の傾きが大きくなるほど azimuth の誤差が大きくなり,画面を垂直にすると全く方位とは無関係な値になる. 実際,ストリートビューに定義どおりの azimuth を渡した場

  • 1