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