- UID
- 227544
- 积分
- 155
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2005-3-16
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
空间一点到面的垂线

- Sub P2Region()
- On Error GoTo E:
- Dim M(5) As Double
- Dim P1 As Variant, P2 As Variant, P3 As Variant, P4 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(, "平面上的第三点:")
- '判断三点是否在一条直线上
- If ThreeP_IsOnline(P1, P2, P3) = True Then
- ThisDrawing.Utility.Prompt "所选三点共线" & vbCrLf
- Exit Sub
- End If
- ThisDrawing.Utility.InitializeUserInput 1, ""
- P4 = ThisDrawing.Utility.GetPoint(, "空间一点:")
- M(0) = P2(0) - P1(0)
- M(1) = P2(1) - P1(1)
- M(2) = P2(2) - P1(2)
- M(3) = P3(0) - P1(0)
- M(4) = P3(1) - P1(1)
- M(5) = P3(2) - P1(2)
- '计算平面方程系数( Ax+By+Cz+D=0)
- Dim A As Double, B As Double, C As Double, D As Double
- A = M(1) * M(5) - M(2) * M(4)
- B = -(M(0) * M(5) - M(2) * M(3))
- C = M(0) * M(4) - M(1) * M(3)
- D = -A * P1(0) - B * P1(1) - C * P1(2)
- Dim T As Double
- T = -(A * P4(0) + B * P4(1) + C * P4(2) + D) / (A ^ 2 + B ^ 2 + C ^ 2)
- Dim P5(2) As Double
- P5(0) = T * A + P4(0)
- P5(1) = T * B + P4(1)
- P5(2) = T * C + P4(2)
- ThisDrawing.ModelSpace.AddPoint P5
- ThisDrawing.ModelSpace.AddLine P4, P5
- ThisDrawing.SetVariable "PDMODE", 35
- Exit Sub
- E:
- ThisDrawing.Utility.Prompt Err.Description & vbCrLf
- End Sub
|
|