2012-02-18 13 views
2

最初の点までの距離で線上の点を計算したいと思います。 私は新しいポイントの任意の座標を持っていけないので、私は線形補間を使用することはできません... 私はこのように考えた:(申し訳ありませんが、私は新しいユーザーだと私は、画像を投稿することができないのです) Example Drawing 最初の点までの距離による直線上の点

実際には動作しませんので、私はあなたに助けを求める。ここで

は、Javaでの実際のコードです:

public static PointDouble interpolationByDistance(Line l, double d) { 
    double x1 = l.p1.x, x2 = l.p2.x; 
    double y1 = l.p1.y, y2 = l.p2.y; 
    double ratioP = ratioLine_x_To_y(l); 
    double disP = l.p1.distance(l.p2); 
    double ratioDis = d/disP; 
    PointDouble pn = l.p2.getLocation(); 
    pn.multi(ratioDis); 
    System.out.println("dis: " + d); 
    System.out.println("new point dis: " + l.p1.distance(pn)); 
    return pn; 
} 

ありがとうございました。

+0

もっと説明変数名を使用すると恩恵を受ける可能性があります。私はあなたの人生を楽にしてくれると確信しています。 – jonmorgan

答えて

3

プログラマーとしては、すでに解決済みのものに問題を変更するのが大好きです。比率を求めて線形補間を使用してください:

public static PointDouble interpolationByDistance(Line l, double d) { 
    double len = l.p1.distance(l.p2); 
    double ratio = d/len; 
    double x = ratio*l.p2.x + (1.0 - ratio)*l.p1.x; 
    double y = ratio*l.p2.y + (1.0 - ratio)*l.p1.y; 
    System.out.println(x + ", " + y); 
    ... 
} 
+0

ありがとう、非常に素晴らしいアルゴリズム! :) – Thomas

+1

ああ、私は言及を忘れていた:3行目は "倍率= d/len;"する必要があります。フルレシオを使用する必要があります。 – Thomas

+0

もちろんあなたは正しいです:)これはまた特別なケースを私たちに救います。 –

1

これの基本は非常に簡単です:

f = 0.3; 
xp = f * x1 + (1-f) * x2; 
yp = f * y1 + (1-f) * y2; 

は、このことを理解して検討する:

  • f==0場合、xp = x2, yp=y2
  • f==1場合、任意の値の後、xp = x1, yp=y1
  • f0..1の間にある場合は、(x1,y1)..(x2,y2)

正確に計算するつもりはありません。これは0..1の範囲の値fをとります。絶対的な長さとしてdがある場合、f=d/disP

関連する問題