嗨,米克
我将使用向量作为示例,因为我可以稍后计算出翻译
我似乎无法计算出x、y和z轴上的单个旋转矩阵,或者它们的相乘顺序
此网站(http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToMatrix/index.htm)在vba<br>中,具有围绕矢量旋转的强大功能
- Function RotateAroundVector(V As Variant, Angle As Double) As Variant
- Dim M(3, 3)
- Dim X As Double, Y As Double, Z As Double
-
- X = V(0): Y = V(1): Z = V(2)
- M(0, 0) = 1 + (1 - Cos(Angle)) * (X * X - 1)
- M(0, 1) = -Z * Sin(Angle) + (1 - Cos(Angle)) * X * Y
- M(0, 2) = Y * Sin(Angle) + (1 - Cos(Angle)) * X * Z
- M(0, 3) = 0
-
- M(1, 0) = Z * Sin(Angle) + (1 - Cos(Angle)) * X * Y
- M(1, 1) = 1 + (1 - Cos(Angle)) * (Y * Y - 1)
- M(1, 2) = -X * Sin(Angle) + (1 - Cos(Angle)) * Y * Z
- M(1, 3) = 0
-
- M(2, 0) = -Y * Sin(Angle) + (1 - Cos(Angle)) * X * Z
- M(2, 1) = X * Sin(Angle) + (1 - Cos(Angle)) * Y * Z
- M(2, 2) = 1 + (1 - Cos(Angle)) * (Z * Z - 1)
- M(2, 3) = 0
-
- M(3, 0) = 0
- M(3, 1) = 0
- M(3, 2) = 0
- M(3, 3) = 1
-
- RotateAroundVector = M
-
- End Function
这使我能够在一定程度上复制cad命令行球面坐标线:0,0,0@1
,到目前为止,它工作正常,因为我还没有尝试过很多变化。我仍然不知道如何计算出3轴,因为如果3可以一次相乘,它们似乎会工作,而一旦你乘以x*y,得到的矩阵乘以z可能是错误的,也许,也许。 |