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
使用这两个在运行时生成的方程,我想计算x3和y3.
数学太多了.
x3 = (x1 - x2) * 1.35 + x2
y3 = (y1 - y2) * 1.35 + y2
Run Code Online (Sandbox Code Playgroud)
除非使用"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 - 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;
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相同的方式将坐标添加到上面的公式中x并y使用...