指向第一点的距离

时间:2012-02-18 16:53:17

标签: java math geometry

我想通过到第一个点的距离计算一条线上的点。 因为我没有新点的任何坐标,我不能使用线性插值... 我这样想: 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;
}

谢谢。

2 个答案:

答案 0 :(得分: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);
  ...
}

答案 1 :(得分: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
  • 对于f之间0..1之间的任何值,您会得到(x1,y1)..(x2,y2)
  • 之间的分数

我不确定你打算计算什么。这在f范围内取值0..1。如果您将d作为绝对长度,请执行f=d/disP