Bryco 发表于 2006-8-20 12:33:27

向量到矩阵

如果我有一个向量,如何将其转换为旋转矩阵?
**** Hidden Message *****

MickD 发表于 2006-8-20 18:06:31

我不认为没有另外两个矢量就能产生给定的矢量,但是如果有这两个矢量,你就可以利用它们之间的角度,绕给定的轴进行正常旋转。
但是,您可以使用矢量作为旋转轴。
向量的问题是它只给出方向和长度,而不是位置,除非它被用作一个点,这仍然只是难题的一部分。

Bryco 发表于 2006-8-20 19:20:03

嗨,米克
我将使用向量作为示例,因为我可以稍后计算出翻译
我似乎无法计算出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可能是错误的,也许,也许。

MickD 发表于 2006-8-20 19:38:29

我的方法是把它分解成几个独立的矩阵来转换当前的坐标系,这样新的z轴就等于矢量,然后构建一个矩阵来绕z轴旋转,这是标准操作。在这个练习中,x和y指向哪个方向并不重要。
然后,您可以将它们相乘,得到最终的矩阵,如果不仔细看,这可能就是您得到的结果,但是如果您将两者分开看,可能会更有意义。
高温。

Bryco 发表于 2006-8-20 20:01:57

这听起来像是GO Mick。就像做一个ucs。
谢谢堆,我会去的。

MickD 发表于 2006-8-20 20:21:30

确切地说,您甚至可以使用温度线对象(来自矢量)来获取x / y轴的法线到另一个轴的xproduct。或者,您可以将当前的x / y轴用于相同的目的,但是它们需要额外的x产品来制造新的ucs正交。
页: [1]
查看完整版本: 向量到矩阵