dev*_*van -2 math equation cartesian
我想找到一个垂直于给定线的点z(x3,y3).在我的例子中,我给出了2个坐标A(x1,y1)和B(x2,y2).我想找到垂直(AZ)到AB线的点z和距离点B的距离(h).ABZ角是90.这是我的c ++代码.
double AB_slope = m; // know it
//找到垂直于AB线的z点
double AZ_slope = - 1/m;
double x3 = x2 + prescribed_distance * dx;
double y3 = y2 + prescribed_distance * dy;
但我不知道找到dx,dy和prescribed_distance.请帮我.
让我把你的问题改写为我认为的问题,然后回答它.
你有分数A = (x1, y1)和B = (x2, y2).你想找到一个点Z = (x3, y3),使得AZ垂直AB,并BZ具有长度h.
从矢量A到B是v = (x2 - x1, y2 - y1).一个易于计算的垂直向量是w = (y2 - y1, x1 - x2).线交叉穿过A其垂直于AB由下式表示F(s) = A + s*w = (x1 + s*(y2 - y1), y1 + s*(x1 - x2))为s在实数的范围.因此,我们需要选择一个值s,从而F(s)为h远离B.
从勾股定理,长度的从方F(s)到B总是将成为距离的平方F(s)来A,再加上距离的平方A来B.从中我们得到了我们想要的混乱表达:
h**2 = s**2 * ((y2 - y1)**2 + (x1-x2)**2) + ((x1 - x2)**2 + (y1 - y2)**2))
= s**2 * ((x1 - x2)**2 + (y1 - y2)**2)) + ((x1 - x2)**2 + (y1 - y2)**2))
= (s**2 + 1) * ((x1 - x2)**2 + (y1 - y2)**2))
(s**2 + 1) = h**2 / ((x1 - x2)**2 + (y1 - y2)**2))
s**2 = h**2 / ((x1 - x2)**2 + (y1 - y2)**2)) - 1
s = sqrt(h**2 / ((x1 - x2)**2 + (y1 - y2)**2)) - 1)
Run Code Online (Sandbox Code Playgroud)
现在将表达式s重新插入F(s) = (x1 + s*(y2 - y1), y1 + s*(x1 - x2)),您就有了自己的观点Z.另一个可能的答案是另一边的距离相同.