3

点から線までの距離を 2D で取得する非常に具体的な方法について詳しく知りたいです。方法は次のとおりです。

// Given an arbitrary point, and a normal vector
// to a line along with a scalar offset
distance = DotProduct(normal, point) - offset

Erin Catto が彼の Box2D Lite ソース コードでこのメソッドを使用しているため、これが真実であることはわかっています。このページでは、プログラマーが方程式について言及しています。

distance = (V dot normal) - offset

これは、そのような計算のために私が見つけることができる唯一のリソースです。ポイントとの半空間の交差を確認する通常の方法は、問題の平面からポイントへのベクトルを点で示し、記号 (+ または -) をチェックして、その平面の法線から離れているか、またはその平面に向いているかを確認することです。結果のスカラーの。

これは、平面 (またはこの場合は 2D ライン) 上の点を見つけるのにコストがかかるリアルタイム アプリケーションでは望ましくない場合があり、このラインの法線とオフセットしかありません。

要するに、この「オフセット」とは何で、どのように計算できるのでしょうか? このオフセットは何を表していますか? 私が現在自分の研究で知っていることから、それは 2D の直線の一般方程式からの c 変数であると推測されます。

ax + by + c = 0

追加情報: Erin Catto はいくつかの場所でこのようなオフセットを計算しています (Oriented Bounding Box の衝突検出のコンテキストで) が、ここでの計算や何が起こっているのかわかりません:

offsetScalar = Dot(BoxPositionVector, normalVector) + BoxYHalfWidthScalar;
4

2 に答える 2

1

次元の半n空間は、方程式によって一意に定義されます

a * x >= c

ここaで、およびxは長さのベクトルでありn*はスカラー(内積)であり、cはスカラーです。a超平面に直交するベクトルですa * x = c。あなたが言ったように、二次元では、これは方程式ax + by - c = 0、すべてのスカラーです。

あなたが言ったことは正確に正しいです。これoffsetは、この定数の値に関連していますcp超平面内の任意の点に対して、がありa * p = cます。半空間の任意の点について、がありますa * p >= c。半空間にない点は、を満たしa * p < cます。

ある点pの場合、の値は、a * p - cその点から超平面までの直交距離も示します-aが単位ベクトルの場合。これは、内積の定義がスカラー射影と同等であるためです。へa/||a|| * pの投影です。したがって、計算で超平面を定義するときは、それに応じて正規化およびスケーリングすると便利です。その場合、はオフセット、または同等に超平面から原点までの距離になります。に投影した後、これを調整する必要があります。paacca

TL; DRバージョンoffset = c/||a||、これはoffset = caが単位ベクトルであることを意味します。

于 2013-03-14T03:05:56.270 に答える
1

offset線が次のように表されている場合、は線から原点までの距離です。

 ax + by + c = 0

それでoffset = c/sqrt(a*a+b*b).

詳細については、こちらをご覧ください。

于 2013-03-14T03:26:04.993 に答える