3

法線 (n) と距離 (d) (原点から) で定義された平面があります。新しいシステムに変えたい。長い道のりは次のようなものです: 1) 距離 (d) と法線 (n) を掛け合わせてベクトル (p) を得る 2) ベクトル (p) を回転 (R) および平行移動 (v) して (p') を得る 3)正規化 (p') して法線を取得します。 4) 別のアルゴリズムを使用して、新しい平面と原点の間の最小距離 (d') を見つけます。

私はこれを試していませんが、うまくいくはずです。質問: n' と d' を取得するより高速な方法はありませんか? 翻訳 (v) が 0 の場合は、4) をスキップできます。しかし、それが 0 でない場合は? 新しい d' を取得する簡単な方法はありますか?

4

2 に答える 2

5

法線は必ずしもポイントのように変換されるとは限らず、距離は原点への垂直d'= d + n.v距離であるため、注意が必要です。したがって、 を計算する必要があります。移動と回転だけを行っている場合は、法線を回転させて新しい垂直距離を計算できます。ただし、軸を別の方法でスケーリングしたり、一般的な射影変換を行ったりする場合は、別の方法で処理する必要があります。

すべてに対して機能する方法は、同次座標を使用することです。そのため、すべての変換は 4x4 行列であり、点と平面の両方が 4-ベクトルです。

point p=(x,y,z)        -> homogeneous (x,y,z,1), equiv. to (x*W, y*W, z*W, W)
plane q=[n=(a,b,c), d] -> homogeneous [a,b,c,d], equiv. to [a*K, b*K, c*K, d*K)

  -> point p is on plane q iff:  p.q=0   (using homogeneous coords, as above) 

一般に、すべての変換行列を 1 つの 4x4 行列 T に乗算し、その行列をすべてのポイントで使用して、最終的な変換位置を決定します。秘訣は、T の逆転置を使用して平面座標を変換する必要があることです。以下から、これにより点と平面の間の入射が維持されることがわかります。

point p' = T p
plane q' = (T^-1)^t q

  -> point p' is on plane q' when:  p'.q'=0

  then, note:  p'.q' = p^t T^t (T^-1)^t q = p^t q = p.q
  so:  p'.q'=0  whenever p.q=0
于 2010-02-23T09:39:55.567 に答える