求一个垂直于给定直线的点



我想找到一个垂直于给定直线的点z(x3,y3)。在我的例子中,我有两个坐标A(x1, y1)和B(x2, y2)我想求出与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

AB的向量是v = (x2 - x1, y2 - y1)。一个容易计算的垂直向量是w = (y2 - y1, x1 - x2)。与AB垂直的穿过A的线用F(s) = A + s*w = (x1 + s*(y2 - y1), y1 + s*(x1 - x2))表示,因为s在实数范围内。因此,我们需要选择一个值s,使F(s)B的距离为h

根据毕达哥拉斯定理,从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。另一个可能的答案是在另一边相同的距离

相关内容

  • 没有找到相关文章

最新更新