VTK transform空间变换

文章讲述了在VTK中如何使用PreMultiply和PostMultiply方法进行空间变换,包括欧拉角到齐次矩阵的转换以及变换顺序对结果的影响。通过示例展示了旋转和平移矩阵的组合应用,强调了变换顺序在动系和定系变换中的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

VTK transform空间变换顺序

欧拉位姿 x y z rx ry rz 变为齐次矩阵

pose = [2.27117 , -34.3437 , 479.336 , 94.1909 , 10.6705 , 169.347]
x,y,z,rx,ry,rz = pose

其齐次矩阵结果是:

H =  
[[ -0.96577106  -0.16797325   0.1976645    2.27117   ]
[  0.18166395   0.10595762   0.97763551 -34.3437    ]
[ -0.18516067   0.98008059  -0.07181612 479.336     ]
[  0.           0.           0.           1.        ]]

PreMultiply 表示 M= M * A ,自左乘,表示以当前系变换——绕动系变换

transform = vtk.vtkTransform()
transform.PreMultiply() 
transform.Scale(1, 1, 1)
# 以下四行代码乘积方式 : transform = E * T * RZ * RY * RX —— E是单位矩阵,为transform初始值。
transform.Translate(x, y, z) 
transform.RotateZ(rz) 
transform.RotateY(ry)
transform.RotateX(rx)

transform.Update()
print(transform.GetMatrix())

或者:
PostMultiply 表示 M= A * M ,自右乘,表示以基础系变换——绕定系变换
结果是:transform = T * RZ * RY * RX * E—— E是单位矩阵,为transform初始值

transform = vtk.vtkTransform()
transform.PostMultiply()
transform.RotateX(rx)  # transform = RX * transform
transform.RotateY(ry)  # transform = RY * transform
transform.RotateZ(rz)  # transform = RZ * transform
transform.Translate(x, y, z)  # transform = T * transform
print(transform.GetMatrix())

结果一致,均是:

-0.965771 -0.167973 0.197664 2.27117 
0.181664 0.105958 0.977636 -34.3437 
-0.185161 0.980081 -0.0718161 479.336 
0 0 0 1 

总结 :
抓住本质:
PreMultiply 动系变换,自身M在左边:M= MA(A可以是旋转或平移);
PostMultiply 定系变换,自身M在右边:M= A
M(A可以是旋转或平移)。
每次进行矩阵乘积的顺序和内容,依照自己需求来定,如动系 Z-Y-Z 变换(10,20,30)可以这样实现:

transform.PreMultiply() 
transform.Scale(1, 1, 1)
transform.RotateZ(30) 
transform.RotateY(20)
transform.RotateZ(10)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值