旋转3d结构

时间:2012-10-06 07:13:26

标签: perl vector 3d rotation

我有一个数组,其中包含3d建模信息x,y,z坐标,用于旋转并放置在所需姿态的结构。我还有一个新的数组,它具有相似的结构,没有旋转或放置。新结构坐标从[0 0 0]开始。 通过将正确旋转的数组的第一个元素添加到非结构化数组,可以很容易地将结构的第一部分放到正确的位置。我现在的问题是轮换。如何旋转新元素以使其与正确旋转的数组的x,y和z中的角度匹配? 谢谢

1 个答案:

答案 0 :(得分:2)

如果您可以从数据中找到三个代表性向量向上向右,则旋转矩阵将为:

[rx ux fx ox]
[ry uy fy oy]
[rz uz fz oz]
[ 0  0  0  1]

其中O = [ox oy oz]是原点

如果您了解旋转结构的几何形状,这是可行的。

为什么它起作用从单位矩阵和旋转矩阵的解释中看出:
在参考坐标系

 'Right' = [1 0 0 0], 
 'Up'    = [0 1 0 0],
 'Front' = [0 0 1 0],

 Multiplying each of these by the rotation matrix:
   [a d g 0]   Right*R = [a b c 0];
 R=[b e h 0]   Up * R  = [d e f 0];
   [c f i 0]   Front*R = [g h i 0];
   [0 0 0 1] 

 If there is no rotation, R = I == identity matrix; 

 Then Right * I = [1 0 0 0]; Up*I = [0 1 0 0 ]; Front*I = [0 0 1 0];

相反,如果你知道你的几何体包含一个立方体(甚至可能是缩放的......) 然后知道旋转顶点数组中的哪个点对应于点 o F R U ,就立方体而言,它主要是一个选择问题。 。

 U
 |
 |        ___---F
 |  ___---    
 o--
    --__
        --R

前向量=(F-o)/ | F-o |,右=(R-o)/ | R-o |,Up =(U-o)/ | U-o |