使用c ++查找第三行

时间:2011-07-08 06:33:22

标签: c++ algorithm math

我在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 ;

我想使用Slopedis找到新的坐标x3,y3。

任何人都可以帮我解决这个问题。

要计算x3,我可以使用数学部分,

x3 = slope * y3 -------------------1

dis = sqrt(pow(x3-x1) + pow(y3-y1)) ------------2

使用这两个在运行时间生成的方程,我想计算x3y3

3 个答案:

答案 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 - x1dy = y2 - y1与从P1到P2的方向单位向量的组成部分成比例,而不是使用mq来定义该行(避免垂直或几乎垂直的线条出现任何问题)。

如果您需要特定距离上的点,则只需使用

找到实际的单位矢量分量
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坐标添加到上述公式,方式与xy的使用方式相同......

答案 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