- 积分
- 1846
- 明经币
- 个
- 注册时间
- 2003-12-24
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2017-12-31 10:55:30
|
显示全部楼层
Sub qiu_gc()
Dim a1 As Double, b1 As Double, c1 As Double
Dim a2 As Double, b2 As Double, c2 As Double
Dim x1 As Double, y1 As Double, z1 As Double
Dim x2 As Double, y2 As Double, z2 As Double
Dim x0 As Double, y0 As Double, z0 As Double
Dim x As Double, y As Double, ee As Double
Dim dlt As Double, dx As Double, dy As Double
ee = 0.000001
p1 = thisdrawing.Utility.GetPoint(, "第一点:")
p2 = thisdrawing.Utility.GetPoint(p1, "第二点:")
x1 = p1(0): y1 = p1(1): z1 = 200
x2 = p2(0): y2 = p2(1): z2 = 100
'直线方程系数
a1 = y2 - y1
b1 = x1 - x2
c1 = -a1 * x1 - b1 * y1
'求任意点标高
p0 = thisdrawing.Utility.GetPoint(, "任意点:")
x0 = p0(0): y0 = p0(1)
'垂线系数
a2 = b1
b2 = -a1
c2 = -a2 * x0 - b2 * y0
'求垂足
dlt = a1 * b2 - a2 * b1
dx = c1 * b2 - c2 * b1
dy = a1 * c2 - a2 * c1
If (Abs(dlt) < ee) Then
If (Abs(dx) < ee) And (Abs(dy) < ee) Then
x = 1E+20
y = 1E+20
Else
x = -1E+20
y = -1E+20
End If
Else
x = -dx / dlt
y = -dy / dlt
End If
'求z0=z
If x1 = x2 Then
bl = (y - y1) / (y1 - y2)
z = z1 + bl * (z1 - z2)
Else
bl = (x - x1) / (x1 - x2)
z = z1 + bl * (z1 - z2)
End If
'Debug.Print x, y, z
MsgBox "标高=" & Format(z, "##0.0000")
End Sub
|
|