2011-03-08 18 views
7

私は(衝突検出のために)動作する分離軸定理アルゴリズムを得ようとしており、点と線の間に最小垂直ベクトルを見つける必要があります。私は最小の垂直距離(どのように見つけるか分かっています)を求めているのではなく、その距離と同じ大きさを持ち、任意の点と直線上の点から来るベクトルを求めています。私は、点の位置、線上の点、線の方向を与える単位ベクトルを知っています。点と線の間の最小の垂直ベクトル

私がやったことは、最初にポイントとラインの間の最小距離を見つけることでした。

次の部分は混乱であるが、I: 1)ライン上の点とラインプラスユニット上の点との間のベクトルを見つかりました)私は 2を知っている点とライン上の点との間のベクトルを発見します線の方向を与えるベクトル 3)これらの2つのベクトルの外積を取った(私はこの外積をAと呼ぶ) 4)線の方向と交差からのベクトルを与える単位ベクトルの外積を取った製品A(この製品Bと呼ぶ) 5)標準化された製品B 6)最小限の距離でBの製品Bをスケールしたもの

とにかくatt惨めに失敗しました。誰が私にこのベクトルを見つけるはずですか教えていただけますか?

+0

あなたはこれを行うためのプログラムを書く、またはちょうどあなたの物理/ Calcの宿題をやろうとしていますか? –

+2

私はそれが衝突の検出のためだと言ったように、私は楽しいために書いているゲームのためです。 – user421215

答えて

24

私が正しくあなたの質問を理解している場合、私は、これはあなたが探しているものであると信じて:

期間は内積と表し
P - point 
D - direction of line (unit length) 
A - point in line 

X - base of the perpendicular line 

    P 
    /| 
/| 
/v 
A---X----->D 

(P-A).D == |X-A| 

X == A + ((P-A).D)D 
Desired perpendicular: X-P 

| X-Aを|マグニチュードを意味する。

+0

ちょうどを明確にする。ドットプロダクトの権利を表しますか? – user421215

+0

右。それは私が "期間"によって意味したものです:) – Pablo

+0

ごめんなさい。とにかく、仕事をしたいと思っているようですが、なんらかの理由で私のSATアルゴリズムはちょっとです。もしそうでなければ物事が衝突している。私はあなたが私に与えたものはおそらく衝突が "より正確"であると思われていると思っています、そして、私は現在、より多くの標的に見えるあらゆる種類のマーカーを持っています。ありがとう、ありがとうございます。残念ながら、私はコードで他の種類のエラーを作り出したようです。 – user421215

2

enter image description here

上の図から、あなたが持っている:

q = p + s --> s = q - p = q - (p2-p1) = q + p1 - p2 

==> s^ = |q - p2 - p1|/|s| (unitary vector) 

Also: |s| = |q| sin c = |q|sin(b-a) 

b = arcsin (qy/|q|); a = arcsin(p1y/|p1|) 

where: |q| = (qx^2 + qy^2)^1/2 
関連する問題