2012-03-05 16 views
0

したがって、ライン(AB)の2つの座標が与えられている点からラインまでの距離(2D空間)を知る必要があります。ここでポイント間距離(2D)と交差点の座標

は、私がこれまで持っているものです。

public double pointToLineDistance(Point A, Point B, Point P) 
{ 
    double normalLength = Math.sqrt((B.x - A.x) * (B.x - A.x) + (B.y - A.y) * (B.y - A.y)); 
    return Math.abs((P.x - A.x) * (B.y - A.y) - (P.y - A.y) * (B.x - A.x))/normalLength; 
} 

しかし、私はまた、垂直線がABライン(それは、このセグメントの外にいた場合、それは大丈夫です)と交わる点の座標を取得する必要があります。

アイデア?

+1

。 –

答えて

1

考え方は、点Aと点Bを通る線の方程式を作成することです。その方程式を作成すると、Pを通り、ABに垂直な線の方程式を構成します。垂線の方程式は、AB線の方程式から容易に導かれる係数を有する。 2つの方程式が得られたら、それらを解くと交差点の座標が得られます。

これは宿題ですか?

+0

いいえ、それは宿題のためではありません、私はそれのために少し古いです;)私はフラッシュで物理学のゲームを作っています – nastaseion

+2

あなたはおそらくより多くのそのような問題にぶつかるので、 。 – zvrba

+0

アドバイスをいただきありがとうございます。私は思う。私が解決しなければならなかった問題は、これよりはるかに複雑でした。しかし、私はこの部分に出てきました。それは簡単に見えましたが、そうではなかったようです。しかし、あなたが正しいです、私はちょうど休憩を取ると新しい目でそれを見て、次にそれを自分で解決しようとする必要があります。ありがとう:) – nastaseion

1

はABがちょうどそう

ab = A + (B - A) * s 

として表現することができることを確認して役立つだろう、ABの方向がB - A、または(B.x - A.x, B.y - A.y)です。方向が(A.y - B.y, B.x - A.x)の線は垂直になります。 (私達はちょうど、xとyを交換し、そのうちの一つを否定。)

我々は、特にABに垂直であり、また、Pを通過するので、我々は

perp = P + (A.y - B.y, B.x - A.x) * t; 
perp = (P.x + A.y - B.y, P.y + B.x - A.x) * t; 

は今ちょうど交差点を見つけるのですか行をしたいですこの垂線とABとの間にある。 2つの方程式(交点のxとy成分)と2つの未知数(sとt)があります。 sとtを見つけたら、線の式のいずれかにそれらを差し込み交点を求めます。ここで

いくつかの作業コードです:これは、前回の* *数十人を頼まれてい

static Vect2 getIntersection(Vect2 A, Vect2 B, Vect2 P) { 
    Vect2 abDir = B.minus(A); 
    Vect2 perpDir = new Vect2(-abDir.y, abDir.x); 
    Vect2 apDir = P.minus(A); 
    double s = (perpDir.y * apDir.x - perpDir.x * apDir.y) 
      /(abDir.x * perpDir.y - abDir.y * perpDir.x); 
    return A.plus(abDir.scale(s)); 
} 

class Vect2 { 
    final double x, y; 

    Vect2(double x, double y) { 
     this.x = x; 
     this.y = y; 
    } 

    Vect2 scale(double k) { 
     return new Vect2(x * k, y * k); 
    } 

    Vect2 plus(Vect2 that) { 
     return new Vect2(x + that.x, y + that.y); 
    } 

    Vect2 minus(Vect2 that) { 
     return this.plus(that.scale(-1)); 
    } 
} 
関連する問題