前往小程序,Get更优阅读体验!
立即前往
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 >三维变换矩阵的理解

三维变换矩阵的理解

原创
作者头像
邹成卓
修改2017-07-26 12:13:40
8.5K7
修改2017-07-26 12:13:40
举报
文章被收录于专栏: 邹成卓的专栏 邹成卓的专栏

3D空间中的一个点的坐标,可以用(x,y,z)来表示。

对这个点的坐标变换有三种操作:缩放、平移、旋转。 缩放之后,点的坐标变为(Sx*x,Sy*y,Sz*z);平移之后,点的坐标变为(Tx+x,Ty+y,Tz+z);旋转会比较麻烦一点,在后边的详细内容中描述。

上面的操作其实可以用矩阵运算来简单的表示,但是用矩阵表示变换的时候会有一个问题:用一个矩阵可以同时表示点的缩放、旋转,但是没办法表示平移了。 此时需要引入一个齐次坐标的表示方法,将点的(x,y,z)坐标表示为(x,y,z,1)

1.缩放矩阵

点在x、y、z轴的缩放分别为Sx、Sy、Sz,那么缩放可以用下面的矩阵来表示:

Sx

0

0

0

0

Sy

0

0

0

0

Sz

0

0

0

0

1

(x,y,z,1) * S = (Sx*x,Sy*y,Sz*z,1)

2.旋转矩阵

首先看一下点绕着x、y、z三个坐标轴旋转一定角度时,坐标的表示方法:

用矩阵来表示:

那么当点(x,y,z)绕x、y、z轴分别旋转Rx、Ry、Rz角度时,旋转矩阵R=RxRyRz,得到矩阵如下:

cos(Rx)*cos(Rz)

cos(x)*sin(z)

-sin(y)

0

sin(x)sin(y)cos(z)-cos(x)*sin(z)

sin(x)sin(y)sin(z)+cos(x)*cos(z)

sin(x)*cos(y)

0

cos(x)sin(y)cos(z)+sin(x)*sin(z)

cos(x)sin(y)sin(z)-sin(x)*cos(z)

cos(x)*cos(y)

0

0

0

0

1

3.平移矩阵

点在x、y、z轴的平移分别为Tx、Ty、Tz,那么缩放可以用下面的矩阵来表示:

1

0

0

0

0

1

0

0

0

0

1

0

Tx

Ty

Tz

1

(x,y,z,1) * T = (Tx+x,Ty+y,Tz+z,1)

4.综合变换矩阵

综合上边的三个矩阵,可以得到最终的变换矩阵: M=S*R*T

Sxcos(Rx)cos(Rz)

Sxcos(Rx)sin(Rz)

-Sx*sin(Ry)

0

Sy(sin(Rx)sin(Ry)cos(Rz)-cos(Rx)sin(Rz))

Sy(sin(Rx)sin(Ry)sin(z)+cos(Rx)cos(Rz))

Sysin(Rx)cos(Ry)

0

Sz(cos(Rx)sin(Ry)cos(Rz)+sin(Rx)sin(Rz))

Sz(cos(Rx)sin(Ry)sin(Rz)-sin(Rx)cos(Rz))

Szcos(Rx)cos(Ry)

0

Tx

Ty

Tz

1

简写为

m00

m01

m02

0

m10

m11

m12

0

m20

m21

m22

0

Tx

Ty

Tz

1

不同的编译器在内存管理方式上的不同,会导致有的情况下使用行优先的写法较好,有的情况下使用列优先的写法较好。我这边实践的过程中接触的是列优先的写法:

m00

m10

m20

Tx

m01

m11

m21

Ty

m02

m12

m22

Tz

0

0

0

1

得到这样一个矩阵之后,围绕x、y、z三个轴所做的选择、缩放、平移操作,所影响的矩阵中的位置就一目了然了

4.1左右手系转换

假如我们得到了一个右手坐标系下的变换矩阵,需要把它转换为左手坐标系下的变换矩阵,那么可以将其绕一个平面翻转,假设选择绕xoy平面翻转。

分析一下翻转之后的结果:Tz变为-Tz;Rx变为-Rx;Ry变为-Ry;其他不变。

正弦和余弦函数的曲线:

将这些变化代入上面得到的最终版变换矩阵,可以得到

m02 = -m02; m12 = - m12; m20 = -m20; m21 = -m21; Tz = -Tz

将变换矩阵中这些位置的值都乘以-1,即可得到绕xoy平面翻转之后的左手系变化矩阵。

m00

m10

-m20

Tx

m01

m11

-m21

Ty

-m02

-m12

m22

-Tz

0

0

0

1

也可以换一种思路,当用右手系变换矩阵变换完成之后,将坐标沿着xoy平面做个翻转,这个翻转可以用一个缩放矩阵来表示:

1

0

0

0

0

1

0

0

0

0

-1

0

0

0

0

1

M*S 得到新的矩阵,转换为列优先的写法:

m00

m10

-m20

Tx

m01

m11

-m21

Ty

m02

m12

-m22

Tz

0

0

0

1

也就是说,把第三列都乘以-1就可以了

上面两种思路可以得到等价的坐标系转换结果。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
LV.
文章
0
获赞
0
目录
  • 1.缩放矩阵
  • 2.旋转矩阵
  • 3.平移矩阵
  • 4.综合变换矩阵
    • 4.1左右手系转换
    相关产品与服务
    图像处理
    图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
    产品介绍 产品文档
    618年中盛惠,限时抢
    领券
    问题归档 专栏文章 快讯文章归档 关键词归档 开发者手册归档 开发者手册 Section 归档

    两个鬼故事网站检测工具女孩起名周男孩徐的起名魔兽争霸地图晋城起名哪里好给自己起名字免费的虎宝宝起小名给姓彭的宝宝起名子迪丽热巴微博父亲姓冯母亲姓李起名晞怎么读凯立德激活码生成器网上怎么起名字吗易姓男孩起名大全大全猛鬼霸王花卜易居起名男气功名字四字房地产公司起名师小札2021年生辰八字取名字免费起名vc2010红剪花绽放吧百合电视剧剧情介绍ngageps平面设计教程蛋糕店起名简洁响亮起名字大全起起名大全10086人工服务仙之侠道1.6攻略八字缺金起名字大全少年生前被连续抽血16次?多部门介入两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”淀粉肠小王子日销售额涨超10倍高中生被打伤下体休学 邯郸通报单亲妈妈陷入热恋 14岁儿子报警何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言张家界的山上“长”满了韩国人?男孩8年未见母亲被告知被遗忘中国拥有亿元资产的家庭达13.3万户19岁小伙救下5人后溺亡 多方发声315晚会后胖东来又人满为患了张立群任西安交通大学校长“重生之我在北大当嫡校长”男子被猫抓伤后确诊“猫抓病”测试车高速逃费 小米:已补缴周杰伦一审败诉网易网友洛杉矶偶遇贾玲今日春分倪萍分享减重40斤方法七年后宇文玥被薅头发捞上岸许家印被限制高消费萧美琴窜访捷克 外交部回应联合利华开始重组专访95后高颜值猪保姆胖东来员工每周单休无小长假男子被流浪猫绊倒 投喂者赔24万小米汽车超级工厂正式揭幕黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发当地回应沈阳致3死车祸车主疑毒驾恒大被罚41.75亿到底怎么缴妈妈回应孩子在校撞护栏坠楼外国人感慨凌晨的中国很安全杨倩无缘巴黎奥运校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变王树国卸任西安交大校长 师生送别手机成瘾是影响睡眠质量重要因素国产伟哥去年销售近13亿阿根廷将发行1万与2万面值的纸币兔狲“狲大娘”因病死亡遭遇山火的松茸之乡“开封王婆”爆火:促成四五十对奥巴马现身唐宁街 黑色着装引猜测考生莫言也上北大硕士复试名单了德国打算提及普京时仅用姓名天水麻辣烫把捣辣椒大爷累坏了

    两个鬼故事 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化