使用c ++查找第三行

fir*_*dev 1 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 ;

我想用Slope和找到新的坐标x3,y3 dis.

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

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

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

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

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

Ign*_*ams 6

数学太多了.

x3 = (x1 - x2) * 1.35 + x2
y3 = (y1 - y2) * 1.35 + y2
Run Code Online (Sandbox Code Playgroud)


650*_*502 5

除非使用"1.5d"图形y=y(x),否则不应使用基于公式的公式,y=m*x+q因为这对垂直线条不起作用(对于近垂直线条而言效果不佳).

在您的情况下,最好的方法是使用参数方程作为一条线

x = x1 + t * dx
y = y1 + t * dy
Run Code Online (Sandbox Code Playgroud)

其中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;
Run Code Online (Sandbox Code Playgroud)

然后是你需要的点的坐标

double x3 = x1 + prescribed_distance * dx;
double y3 = y1 + prescribed_distance * dy;
Run Code Online (Sandbox Code Playgroud)

或者使用-prescribed_distance取而代之的取决于您想要点的哪一方:朝向P2或远离它?

但是,如果规定的距离与两点之间的当前距离成比例,则不需要归一化,结果可以更简单:

double x3 = x1 + (x2 - x1) * k;
double y3 = y1 + (y2 - y1) * k;
Run Code Online (Sandbox Code Playgroud)

其中k是规定距离与两点之间的距离之间的比率(再次根据您感兴趣的哪一方带有正号或负号).

除了没有依赖于坐标系的人为奇点问题之外,通过使用参数方程x=x(t), y=y(t)而不是显式方程y=y(x),您还可以获得在更高维度上扩展的公式.例如,对于3d线,您基本上只需要以z相同的方式将坐标添加到上面的公式中xy使用...