2016-11-01 8 views
1

私は多くの点で構成されるLineString(座標の文字列)を持っており、線に沿った距離を計算したい、方向性が重要です)。に近いです。"project()" calculation他の点(別名「プロジェクト」)に最も近い、線に沿った距離を計算する

サードパーティ製のライブラリを使用する必要がなければ素晴らしいと思いますが、これは簡単に行うことができます。

+0

例から取りましたか?私たちにいくつかのコードを教えてくれますか?それは簡単に実行できますが、数学を通して考える必要があり、いったんそれがあるとすれば、数学のコードを書くのは簡単なことです。 – sorifiend

+0

@sorifiend私は行単位で(線ストリングの点を結んで)行くことができ、それぞれに最も近い点を見つけて、その点までの距離を見つけることができます。次に、最も近い点をとり、これを使用します。次に、線分の下の距離を測定し、その線分を追加してから、線の部分線分を選択した点で追加します。しかし、これは複雑に聞こえて、おそらく非常に効率的に行われているものの方が遅いです。 – HaydenKai

答えて

1

リニアリファレンスは、あなたが探しているものです。あなたのコメントからは複雑に聞こえますが、それを解読してから最後の部分を解くためにループを追加するだけで、数学やコードの真剣に単純な部分です。あなたは明らかに

import java.awt.Point; 

public class Util{ 

    /** 
    * Returns closest point on segment to point 
    * @param ss - segment start point 
    * @param se - segment end point 
    * @param p - point to found closest point on segment 
    * @return closest point on segment to p 
    */ 
    public static Point getClosestPointOnSegment(Point ss, Point se, Point p) 
    { 
    return getClosestPointOnSegment(ss.x, ss.y, se.x, se.y, p.x, p.y); 
    } 

    /** 
    * Returns closest point on segment to point 
    * @param sx1 - segment x coord 1 
    * @param sy1 - segment y coord 1 
    * @param sx2 - segment x coord 2 
    * @param sy2 - segment y coord 2 
    * @param px - point x coord 
    * @param py - point y coord 
    * @return closets point on segment to point 
    */ 
    public static Point getClosestPointOnSegment(int sx1, int sy1, int sx2, int sy2, int px, int py) 
    { 
    double xDelta = sx2 - sx1; 
    double yDelta = sy2 - sy1; 

    if ((xDelta == 0) && (yDelta == 0)) 
    { 
     throw new IllegalArgumentException("Segment start equals segment end"); 
    } 

    double u = ((px - sx1) * xDelta + (py - sy1) * yDelta)/(xDelta * xDelta + yDelta * yDelta); 

    final Point closestPoint; 
    if (u < 0) 
    { 
     closestPoint = new Point(sx1, sy1); 
    } 
    else if (u > 1) 
    { 
     closestPoint = new Point(sx2, sy2); 
    } 
    else 
    { 
     closestPoint = new Point((int) Math.round(sx1 + u * xDelta), (int) Math.round(sy1 + u * yDelta)); 
    } 
    return closestPoint; 
    } 
} 

Util.getClosestPointOnSegment(Point ss, Point se, Point p)

コード:

以下

は、あなたが使用して線分上の最も近い点を見つけるためにそれを使用することができます .... Google検索から引き出さ素敵なコードですチェックするために最も近いセグメントを作るためにいくつかのコードを書く必要がありますが、まだ長さを追加していますが、これはあなたを始めさせるでしょう。あなたがこれまでに試してみました何

http://www.java2s.com/Code/Java/2D-Graphics-GUI/Returnsclosestpointonsegmenttopoint.htm

+0

他の誰も来なければ答えを受け入れますが、私はあなたの解をすでに理解しているので、より完全なものを探していました。まだそれを敷設してくれてありがとう – HaydenKai

関連する問題