三维变换矩阵左乘和右乘分析
2016-07-05 01:38
721 查看
我在前面博客中提到,当三维坐标点发生旋转时,如果采用矩阵运算就会需要考虑“左乘”和“右乘”。若绕静坐标系(世界坐标系)旋转,则左乘,也是变换矩阵*坐标矩阵;若是绕动坐标系旋转(自身建立一个坐标系),则右乘,也就是坐标矩阵*变换矩阵。
但现实中,我们只是对一个图像、点云进行旋转,则均是左乘实现
举例
对坐标点进行三维绕z轴逆时针旋转60度
如果以逆时针旋转为正,则左乘
T_Unclockwise =
cos(60°) -sin(60°) 0
sin(60°) cos(60°) 0
0 0 1.0000
A = [10;20;30]
如果以顺时针旋转为正,则左乘
T_Clockwise =
cos(-60°) sin(-60°) 0
-sin(-60°) cos(-60°) 0
0 0 1.0000
注意上述旋转矩阵正负号不同,有些书上坐标变换是右乘,其实质是A'*inv(T_Unclockwise(60°)),还是逆时针为正,这里不建议写成右乘
T_Clockwise(-60°) *A = T_Unclockwise(60°) *A %%逆时针旋转60度
ans =
-12.3200
1.3400
30.0000
T_Clockwise(60°)= inv(T_Unclockwise(60°)),互逆的,仅限旋转矩阵,加入平移和缩放参数后的变换矩阵不适用。
二维也是如上所述!!
二维逆时针为正
T_Unclockwise =
cos() -sin()
sin() cos()
二维顺时针为正
T_Clockwise =
cos() sin()
-sin() cos()
建议取逆时针方向正(符号右手定则,与其它理论一致),如果遇到中心不在原点处,则先将方程移至原点,再进行旋转,然后移回原中心。右乘用于不同坐标系的变换,如串联机器人,DH模型。
但现实中,我们只是对一个图像、点云进行旋转,则均是左乘实现
举例
对坐标点进行三维绕z轴逆时针旋转60度
如果以逆时针旋转为正,则左乘
T_Unclockwise =
cos(60°) -sin(60°) 0
sin(60°) cos(60°) 0
0 0 1.0000
A = [10;20;30]
如果以顺时针旋转为正,则左乘
T_Clockwise =
cos(-60°) sin(-60°) 0
-sin(-60°) cos(-60°) 0
0 0 1.0000
注意上述旋转矩阵正负号不同,有些书上坐标变换是右乘,其实质是A'*inv(T_Unclockwise(60°)),还是逆时针为正,这里不建议写成右乘
T_Clockwise(-60°) *A = T_Unclockwise(60°) *A %%逆时针旋转60度
ans =
-12.3200
1.3400
30.0000
T_Clockwise(60°)= inv(T_Unclockwise(60°)),互逆的,仅限旋转矩阵,加入平移和缩放参数后的变换矩阵不适用。
二维也是如上所述!!
二维逆时针为正
T_Unclockwise =
cos() -sin()
sin() cos()
二维顺时针为正
T_Clockwise =
cos() sin()
-sin() cos()
建议取逆时针方向正(符号右手定则,与其它理论一致),如果遇到中心不在原点处,则先将方程移至原点,再进行旋转,然后移回原中心。右乘用于不同坐标系的变换,如串联机器人,DH模型。
相关文章推荐
- Distribute by和Sort by执行流程图
- 逆向工程之表达式优化识别(3)-除法(上)
- 《Java数据结构与算法》笔记-CH6-递归-1递归实现全排列字符串
- 338. Counting Bits--LeetCode Record
- Java环境安装
- Struts2系列:(24) 国际化(二)案例-快速入门
- geeksforgeeks@ Maximum Index (Dynamic Programming)
- Java 理论与实践: 正确使用 Volatile 变量
- 1. react-native-ios之----20分钟搭建环境
- leetcode-226. Invert Binary Tree c++ java
- 刘汝佳紫书 uva220 解题报告
- hdu 4995 Revenge of kNN(暴力枚举)
- QxOrm笔记(二)
- 干货分享:MySQL之化险为夷的【钻石】抢购风暴
- PAT 1027 打印沙漏
- Android之Json解析
- PD003-NET通用后台系统
- HDU-1402-A*B Problem Plus
- 安装mysql到最后一步无响应问题解决
- 第三课:控件的使用及按键响应-20160705