找到垂直于其他两个点的点的算法
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)
现在直接放置P4
under/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)。
我正在尝试编写一个算法来解决这个问题:
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)
现在直接放置P4
under/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)。