'空间一点到线的垂线
' www.tiancao.net
' 田草博客
' tiancao1001@126.com
Sub P2Line()
On Error Resume Next
Dim P1 As Variant, P2 As Variant, P3 As Variant
ThisDrawing.Utility.InitializeUserInput 1, ""
P1 = ThisDrawing.Utility.GetPoint(, "直线上的第一点:")
ThisDrawing.Utility.InitializeUserInput 1, ""
P2 = ThisDrawing.Utility.GetPoint(, "直线上的第二点:")
ThisDrawing.Utility.InitializeUserInput 1, ""
P3 = ThisDrawing.Utility.GetPoint(, "空间一点:")
'如果三点在一条直线上,则垂足就是P3点。
'直线P1-P2的向量{M(0),M(1),M(2)}
Dim M(5) As Double
M(0) = P2(0) - P1(0)
M(1) = P2(1) - P1(1)
M(2) = P2(2) - P1(2)
'直线P2-P3的向量{M(3),M(4),M(5)}
M(3) = P2(0) - P3(0)
M(4) = P2(1) - P3(1)
M(5) = P2(2) - P3(2)
Dim T As Double
T = -(M(0) * M(3) + M(1) * M(4) + M(2) * M(5)) / (M(0) ^ 2 + M(1) ^ 2 + M(2) ^ 2)
'垂足
Dim P4(2) As Double
P4(0) = M(0) * T + P2(0)
P4(1) = M(1) * T + P2(1)
P4(2) = M(2) * T + P2(2)
ThisDrawing.ModelSpace.AddPoint P4
ThisDrawing.ModelSpace.AddLine P3, P4
ThisDrawing.SetVariable "PDMODE", 35
End Sub