2011-02-18 5 views
4

ポイントが2Dライン上にあるかどうかを確認する方法はわかっていますが、3Dでこれをやりたいのですが。何か案は?ポイントが3Dライン上にあるかどうかを確認しますか?

 // slope from point 1 to point 3 
     var p13:Number = (Math.atan2 (end.x - start.x, end.y - start.y)) * toDegrees; 

     // slope from point 1 to point 2 -- matches? 
     var p12:Number = (Math.atan2 (point.x - start.x, point.y - start.y)) * toDegrees; 

     return Math.round(p12) == Math.round(p13); 
+0

アルゴリズム的に言えば、これは[Math SE](http://math.stackexchange.com/)上でなければなりません。 – zzzzBov

+0

それはここで尋ねられると思うと思うと思うhttp://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect –

答えて

5

ベクターを標準化します。法線が一致するかどうかを確認します。

他のすべての値をその値で除算すると、ベクトルの法線が得られます。

行の任意の点は、同じベクトル法線を持つ必要があります。

+0

+1 - 素晴らしいソリューション!ありがとう –

2

ポイントは実際のコーナーでは決してライン上に置くことはできません。あなたがする必要があるのは、closest point to the lineまでの距離を計算し、これが十分に近いかどうかを判断することです。

+1

-1 - 非常に長く複雑な解決策。完全に不要です。 Xaadeの答えを見てください。 –

+1

ここにはより良い式があります:http://mathworld.wolfram.com/Point-LineDistance3-Dimensional.htmlこのソリューションは、特別なケースについて心配する必要がなく、あなたの「許容値」がむしろ距離ある角度よりも。 –

+0

@Jenko - 法線を比較する際の問題は、線までの距離が線に沿った距離に比例することです。 –

0

線の方程式はv0ライン上のどこかの時点で、dirそれは方向ですある

V(T)= V 0 + T * DIR

あります。あなたの点がこの一次方程式と十分な精度で一致するかどうかを確認するだけです。

関連する問題