找到一个垂直于给定线的点

时间:2011-07-10 18:52:34

标签: 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。请帮帮我。

1 个答案:

答案 0 :(得分:5)

让我将你的问题改写为我认为的问题,然后回答。

您获得了积分A = (x1, y1)B = (x2, y2)。您希望找到一个点Z = (x3, y3),使AZAB垂直,BZ的长度为h

AB的向量为v = (x2 - x1, y2 - y1)。一个易于计算的垂直向量是w = (y2 - y1, x1 - x2)。穿过A的{​​{1}}垂直于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的距离的平方,加上从AB的距离的平方。从中我们得到了我们想要的混乱表达:

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)

现在将s的表达式插回F(s) = (x1 + s*(y2 - y1), y1 + s*(x1 - x2)),然后点Z。另一个可能的答案是另一边的距离相同。