2010-11-20 11 views
3

私はラインセグメント上のポイントを見つけるアルゴリズム(またはアルゴリズムの名前)を探しています、そのようなポイントが存在する場合、それは離れた距離です線分上にない別の点からポイントからラインセグメントの距離にポイント

すなわち、存在し、三点BC。おそらく第4のDである。 ABが線分を構成し、点Cが線分の別の点であるABです。そのような点は線分離れた点Cから所定の距離distanceあるAB上に表示される、存在する場合、ポイントをDを見つけます。

答えて

5

はここを見て:Circle-Line Intersection

Cは真ん中の円で、distanceは半径です。

2つの結果ポイントがあり、そのポイントが実際にライン上にあるのか(それを延長することによって得られるライン上にあるのか)チェックする必要があることに注意してください。

+0

このようなポイントDがあるかどうかを確認するには、これは良いブールテストです。ただし、ポイントDが何であるかを教えてくれるようには見えません。また、これは無限の線のように見える、私は線分が必要です。しかし、提案に感謝します。 – Ryan

5

私はこれを理解するには長すぎましたが、どこでも簡単な答えを見つけることができなかったので、私はここに投稿し、何人かの人々に多くの時間を節約すると考えました。元の投稿は古いものの、ずっと前に誰かが簡単な答えを投稿してくれたらと思います。それは私に実験のカップル日を節約していたでしょう。

public static Point PointFromEndOfLine(Point start, Point end, double distance) 
{ 
    double x = end.X-start.X; 
    double y = end.Y-start.Y; 
    double z = Math.Sqrt(x * x + y * y); //Pathagrean Theorum for Hypotenuse 
    double ratio = distance/z; 
    double deltaX = x * ratio; 
    double deltaY = y * ratio; 

    return new Point(end.X-deltaX, end.Y-deltaY); 
} 

機能は、上記にstartPoint(x、y)は、エンドポイント(x、y)と、エンドポイントからの距離を(かかる。あなたの距離が負の場合、返される点に沿っなendPoint越えるであろうあなたの距離がstartPointとendPointの間の距離よりも大きい場合、戻り点はあなたの開始点の前にありますが、同じ行に残ります。距離が正の数でstartPointとendPointの間の距離よりも小さい場合、返されるポイントは、startPointとendPointの間の線分上にあり、エンドポイントから '距離'にあります。

これは、「類似の三角形」が働く理由は、大きな直角三角形を想像してください。 X軸に平行な三角形を通って、大きな三角形のx、y、z値と、あなたが描いた線によって作成された小さな値とが比例します。すなわち

:X/X == Y/Y ==のZ/Z

ホープこれが誰かを助けます。

+0

これは、元の質問に答えるようには見えません。これは、線分の端点の1つと「距離」離れた点を、2つの端によって定義される線に沿って見つける。元の質問は、第3の点から「距離」離れている点を求めていたが、それは線分上にあってもなくてもよい。 –

+0

まさに私が必要としたもの。 – Brent

関連する問題