我在c ++应用程序中工作。它对我来说是新的。在这里,我写了一个函数,它获得一条线的两个坐标。我必须处理这些坐标并找到同一行中的另一个点。
我将获得A(x1,y1) and B(x2,y2)
坐标。
需要找到
C(x3,y3)
坐标。
因此,我计算给定线的斜率。
Double slope = (x1-x2)/(y1-y2);
我知道第3点与A点之间的距离。
Double dis = sqrt(pow(x2-x1) + pow(y2-y1)) * 1.35 ;
我想使用Slope
和dis
找到新的坐标x3,y3。
任何人都可以帮我解决这个问题。
要计算x3,我可以使用数学部分,
x3 = slope * y3 -------------------1
dis = sqrt(pow(x3-x1) + pow(y3-y1)) ------------2
使用这两个在运行时间生成的方程,我想计算x3
和y3
。
答案 0 :(得分:6)
太多的数学。
x3 = (x1 - x2) * 1.35 + x2
y3 = (y1 - y2) * 1.35 + y2
答案 1 :(得分:5)
除非您使用的是“1.5d”图y=y(x)
,否则不应使用基于y=m*x+q
的公式,因为这对垂直线不起作用(对于近垂直线而言效果不佳)
在您的情况下,最好的方法是使用参数方程式
x = x1 + t * dx
y = y1 + t * dy
其中dx = x2 - x1
和dy = y2 - y1
与从P1到P2的方向单位向量的组成部分成比例,而不是使用m
和q
来定义该行(避免垂直或几乎垂直的线条出现任何问题)。
如果您需要特定距离上的点,则只需使用
找到实际的单位矢量分量double dx = x2 - x1;
double dy = y2 - y1;
double dist = sqrt(dx*dx + dy*dy);
dx /= dist;
dy /= dist;
然后你需要的点的坐标是
double x3 = x1 + prescribed_distance * dx;
double y3 = y1 + prescribed_distance * dy;
或使用-prescribed_distance
取决于您想要点的哪一方:朝向P2或远离它?
然而,如果规定的距离与两点之间的当前距离成比例,则不需要归一化,结果可以更简单:
double x3 = x1 + (x2 - x1) * k;
double y3 = y1 + (y2 - y1) * k;
其中k
是指定距离与两点之间的距离之间的比率(再次根据您感兴趣的一方有正号或负号)。
通过使用参数方程x=x(t), y=y(t)
而不是显式方程y=y(x)
,除了没有依赖于坐标系的人为奇点问题之外,您还可以获得在更高维度上扩展的公式。例如,对于3d线,您基本上需要将z
坐标添加到上述公式,方式与x
和y
的使用方式相同......
答案 2 :(得分:0)
如果您将第一个等式"y3 = slope * x3"
替换为第二个等式"dis = sqrt(pow(x3-x1) + pow(y3-y1))"
,并将两边平方,则可以得到一个二次方程式,您可以使用二次公式求解。
替换后你得到:
dis^2 = (x3-x1)^2 + (slope*x3 - y1)^2
两边都是:
(slope^2+1)*x3^2 + (-2*slope*y1-2*x1) + 2*y1^2 = dis^2
使用二次公式求解x3:
x3 = (2*slope*y1+2*x1) +/- sqrt((2*slope*y1+2*x1)^b - 4*(slope^2+1)*(2*y1^2-dis^2))/(2*(slope^2+1))
将x3替换为第一个等式得到y3:
y3 = slope * x3