3

私は3つのポイントとそれらの座標を持っています。2つの間に線があります。3番目の点が線を作成する人の間にあり、線の近くにあるかどうかを調べたいと思います。図1に、数式を使用して点が同一線上にあるかどうかを確認できる場合を示します。図2では、AとBの間に線があります。たとえば15pxの範囲内の点を確認し、点CがAとBの間にあり、線に近いことを確認し、点Dが遠いため無視します。ラインから。

共線

4

2 に答える 2

4

線分ABからの点Cの距離は、との外積長さです。vector(A,C)unit_vector(A,B)

つまり、(擬似コードで)、

def vec_length(x,y) = sqrt(x*x + y*y)

def unitvec(ax,ay,bx,by) = (dx/m, dy/m) 
        where dx = bx - ax
              dy = by - ay
              m  = vec_length(dx,dy)

def dist_segm(cx,cy,ax,ay,ux,uy) = abs( dx*uy - dy*ux )
        where dx = cx - ax
              dy = cy - ay

CがABの「中間」にあるかどうかを確認するには、計算して、Cが(まだ正の)よりも小さいかどうかを確認します。とにかく計算の一部として計算します。dot_product( vector(A,C), unit_vector(A,B) )vector_length(A,B)vector_length(A,B)unit_vector(A,B)

この方法は、最も計算効率が高くなります。

于 2012-07-23T06:19:52.173 に答える
3

C線への点の正射影を実行ABし、射影点を見つけます:線の点にP最も近い。ここで、必要なのは、セグメントの長さを使用して、線にどれだけ近いかを判断することです。そして、との関係の位置を使用して、が「間」であるかどうかを判断します。CABCPCPABCAB

線への点の正射影は、計算幾何学の標準的な基本操作です。一例として、WolframWorldを参照してください。

私はそれをこのようにします:

  1. 線の法線ベクトルAB(By - Ay, -(Bx - Ax))
  2. このベクトルをポイントに追加し、ポイントCを取得しますC'

    C'x = Cx + By - Ay
    C'y = Cy - Bx + Ax
    
  3. 線と線の交点を見つけます。交点は投影点です。ABCC'P

于 2012-07-23T02:29:32.847 に答える