7,763
社区成员
发帖
与我相关
我的任务
分享
Private x1 As Double, y1 As Double, z1 As Double
Private x2 As Double, y2 As Double, z2 As Double
Private x3 As Double, y3 As Double, z3 As Double
Const PI = 3.1415927
Private Sub Command1_Click()
Dim a1 As Double, b1 As Double, c1 As Double
Dim a2 As Double, b2 As Double, c2 As Double
Dim a3 As Double, b3 As Double, c3 As Double
a1 = x1 - x2: b1 = y1 - y2: c1 = z1 - z2
a2 = x2 - x3: b2 = y2 - y3: c2 = z2 - z3
a3 = x3 - x1: b3 = y3 - y1: c3 = z3 - z1
Dim a As Double, b As Double, c As Double
Dim angle1 As Double, angle2 As Double, angle3 As Double
Dim x As Double
VectorCross a1, b1, c1, a2, b2, c2, a, b, c
x = Sqr(a ^ 2 + b ^ 2 + c ^ 2) / (Sqr(a1 ^ 2 + b1 ^ 2 + c1 ^ 2) * Sqr(a2 ^ 2 + b2 ^ 2 + c2 ^ 2))
angle1 = Asin(x)
VectorCross a2, b2, c2, a3, b3, c3, a, b, c
x = Sqr(a ^ 2 + b ^ 2 + c ^ 2) / (Sqr(a3 ^ 2 + b3 ^ 2 + c3 ^ 2) * Sqr(a2 ^ 2 + b2 ^ 2 + c2 ^ 2))
angle2 = Asin(x)
VectorCross a3, b3, c3, a1, b1, c1, a, b, c
x = Sqr(a ^ 2 + b ^ 2 + c ^ 2) / (Sqr(a1 ^ 2 + b1 ^ 2 + c1 ^ 2) * Sqr(a3 ^ 2 + b3 ^ 2 + c3 ^ 2))
angle3 = Asin(x)
Asin -1.0004
End Sub
Private Sub VectorCross(m1 As Double, n1 As Double, k1 As Double, _
m2 As Double, n2 As Double, k2 As Double, _
a As Double, b As Double, c As Double)
a = n1 * k2 - n2 * k1
b = m2 * k1 - m1 * k2
c = m1 * n2 - m2 * n1
End Sub
Private Function Asin(x As Double) As Double
If Round(x, 3) = 1 Then
Asin = PI / 2
ElseIf Round(x, 3) = -1 Then
Asin = -PI / 2
Else
Asin = Atn(x / Sqr(-x * x + 1))
End If
If Asin < 0 Then
Asin = PI + Asin
End If
Asin = Asin * 180 / PI
End Function
Private Sub Form_Load()
x1 = 0: y1 = 0: z1 = 0
x2 = 1: y2 = 0: z2 = 0
x3 = 0: y3 = 1: z3 = 0
End Sub