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