找到垂直于其他两个点的点的算法

Algorithm to find a point perpendicular to two other points

我正在尝试编写一个算法来解决这个问题:

P1、P2 和 P3 已给出。我正在寻找 P4 和 h.

P3和P4之间的线应与P1和P2之间的线平行。

P4 在 P2 处应垂直于 P1 和 P2 之间的线。

P1、P2、P3可以在飞机上的任何位置。

距离h可以计算出the wikipedia

对于P4的坐标,先求出P1P2线上的方程:

y-y1    x-x1 
----- = -----   ==>  (y2-y1) x + (x1-x2) y + x1 (y1-y2) +y1 (x2-x1) = 0   ==>   Ax+By+C = 0
y2-y1   x2-x1 

(A,B) 是定义垂直于直线方向的向量。如果绘制组件 A=(y2-y1), B=-(x2-x1),则可以很容易地看到这一点。
让我们计算它的单一值:
U = A / sqrt(A^2 + B^2), V = B / sqrt(A^2 + B^2)

注意另一个垂直向量是 (-A, -B)(-U,-V)

将这个垂直矢量乘以 'h' 次到 P2 得到 P4:
P4x= P2x + h U
P4y= P2y + h V

平行线同向或负向所以:

(P4-P3) = c*(P1-P2)

其中 c 是任何标量常数,因为方向的大小可能成正比。对于初学者,我们可以假设 c=1

P4' = P3 + (P1-P2)

现在直接放置P4under/aboveP2只需改变(P1-P2)利用点积

的量级
P4 = P3 + (P1-P2)*dot(P1-P2,P2-P3) / (|P1-P2|*|P2-P3|)

要完成这项工作 P1,P2,P3 必须形成一个三角形并且 P2,P3 不能 above/under 彼此(如果三角形是直角)...

此方法适用于 2D 和更高维度(不仅仅是 2D)。