2009-08-17 6 views
1

ポイントが3D線分内にあるかどうかを判断する良い方法はありますか?PythonのIsPointInsideSegment(pt、line)

私は、ポイントとラインセグメントの間の距離を決定するアルゴリズムがあることを知っていますが、もっとコンパクトで効率的なものがあるかどうか疑問です。

答えて

0

まず、点から線までの距離を求めます。ポイントからラインまでの距離がゼロの場合、それはライン上にあります。

+0

所定のしきい値内でゼロ –

4

3つの点A、B、Cが与えられます。ここで、ABはあなたの線であり、Cはあなたの他の点です。問題をABとACの2つの線で再現することもできます。 ABとACとの間の角度がゼロである場合(すなわち、三角形ABCの​​面積がゼロである場合)、点Cは線上にある。

角度について考えると、2つのベクトル(ABとAC)のうちdot productを使用して、それらの角度を見つけることができます。いくつかの簡単なグーグルでは、便利なリンクのカップルを折り返す:

この方法のボーナスは、それが角度の面で許容範囲を定義するのは簡単だということです。例えば線と点の間にある程度の距離があるにもかかわらず、線の5度以内の任意の点を「線上」とみなしたい場合があります。アプリケーションによっては、実際の線形測定よりも有用です。

1

問題を再現する1つの方法は、問題の線分を含む方程式の解を求めることと、線分の端点の間にある場合はその点を求めることです。

あなたが線分をどのように表現しているかについての詳細は記述しておらず、使用しているモジュールやライブラリについて言及していないので、あなた自身で代数をコードする必要があると思います。 (それは自明ではなく、私の代数はどんな場合でも錆びている)。

あなたのために仕事をするライブラリを調べること(あなたのプロジェクトに組み込むか、そのコードを勉強するか)を検討することがあります。 2Dおよび3Dベクトル、線、セグメントのオブジェクトをpygameのダウンロードと互換性があることを主張し、サポートしています... http://code.google.com/p/pyeuclid/

  • [PyEuclid]:この場合、私はよく見てとるだろう、および円/球。基本的に、あなたのポイントとあなたのセグメントとの距離がイプシロン(あなたの計算に適切ないくつかの閾値)未満の場合、それを交差点として扱います。

    (私が読んだドキュメントで明示的に言っているわけではありませんが、どこかのコードで浮動小数点丸めの問題を処理しなければならないと推測しています)PyEuclidはすべて2200 + pyファイル)。