我想找到一个与给定直线垂直的点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。请帮帮我。
答案 0 :(得分:5)
让我将你的问题改写为我认为的问题,然后回答。
您获得了积分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
的{{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
的距离的平方,加上从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)
现在将s
的表达式插回F(s) = (x1 + s*(y2 - y1), y1 + s*(x1 - x2))
,然后点Z
。另一个可能的答案是另一边的距离相同。