变换矩阵_平移 缩放 旋转及统一变换
1. 位移(translation)
对于一个三维坐标(x, y, z),我们想让它往x轴正方向移动1个单位,往y轴正方向移动1个单位,往z轴正方向移动1个单位,则可以让它加上一个向量(1, 1, 1)
2. 旋转(Rotation)
对于一个三维坐标(x, y, z),让其绕x, y, z轴旋转θ角的方法是在其左边乘上一个旋转矩阵。绕x轴,绕y轴,绕z轴的旋转矩阵分别是:
PS:如果我们想更加通用一点,即点(x, y, z)绕轴(u, v, w)旋转θ的矩阵是什么?
如果u, v, w三者的平方和为1,即该向量是个单位向量,那么矩阵如下:
3. 缩放(scale)
对于一个三维坐标(x, y, z),我们想让它扩大2倍,则可以让它变成(2x, 2y, 2z)。写成矩阵乘法的话,V2 = M*V1,M如下图:
4. 统一变换
有没有什么方法让位移,旋转,缩放都成为统一的一种形式?
答:将三维坐标转换为四维坐标,然后使用线性变换。
线性变换(Linear Transformation / Xforms)是渲染和游戏引擎等图形学工具进行坐标变换的方式,是可逆的。
线性变换的等式如下:
V2 = M*V1
- V是齐次(homogeneous)四维向量(x,y,z,w),竖着写的
- M是齐次4×4矩阵
- 当w=1时,四维坐标会变成三维坐标
对于三维坐标(x, y, z),将其转换为四维坐标,可以直接加个1,即变成(x, y, z, 1)
对于四维坐标(x, y, z, w),都除以w即可转换为三维坐标,即(x/w, y/w, z/w)
1. 四维位移
这个图要从右向左看
从上图中可以看到,四维位移矩阵,是在一个四维单位矩阵(就是对角线都是1,其他都是0的矩阵)的最后一列,放入你想要位移的向量(tx, ty, tz)
2. 四维旋转
绕x轴转θ
从上图中可以看到,四维旋转矩阵,是在我们上面刚说的三维绕轴旋转矩阵的基础上,在最后一行和最后一列补上一个(0,0,0,1)。
3. 四维缩放
从右向左看
和旋转一个道理。
5. 四维变换的性质
可关联(associative)
你可以让一个坐标乘上一个旋转矩阵,再乘上一个位移矩阵,再乘上一个缩放矩阵,再乘上一个旋转矩阵………………旋转和缩放矩阵可交换(communicative)
先旋转后缩放和先缩放后旋转的结果是一样的。RS = SR
位移不满足交换律
先位移再旋转和先旋转再位移结果是不一样的!因为旋转之后模型的正面朝向就变了,所以会向新的方向位移。
TS!=ST, TR!=RT对于任何一个线性变换矩阵,我们可以把它拆解(decompose)为TRS或TSR三个矩阵的乘积的形式。
1)首先提取最后一列,得到位移
2)剩余的矩阵是R和S相乘的矩阵
我们可以先看一下S和R相乘的结果是什么样的SR相乘, 以Z轴旋转为例
从图中可以看出,SR矩阵,第一行的平方和开根就是Sx,第二行的平方和开根就是Sy,第三行的平方和开根就是Sz。第一行除以Sx,第二行除以Sy,第三行除以Sz,即可得到旋转矩阵。
6. 四维变换的逆变换
由于线性变换是可逆的,所以我们可以看一下位移旋转缩放的逆矩阵。
1. 位移
T的逆矩阵是-T,即向反方向移动。
2. 旋转
R的逆矩阵是R的转置矩阵,即以对角线翻转矩阵。
怎么理解呢?比如R是绕X轴旋转θ,那么逆操作就是绕X轴旋转-θ,带入-θ就会发现它变成了转置矩阵。
3. 缩放
S的逆矩阵是1/S,即把对角线上的三个元素都变成倒数,即反向缩放。
4. 线性变换Xforms
TSR的逆矩阵 = R的逆×S的逆×T的逆
以上转载自:https://www.jianshu.com/p/ac1b34420be7
变换矩阵_平移 缩放 旋转及统一变换相关推荐
- qgraphicsview鼠标移动图片_交互式QGraphicsView(平移/缩放/旋转)-阿里云开发者社区...
简述 Graphics View提供了一个平台用于大量自定义 2D 图元的管理与交互框架包括一个事件传播架构支持场景 Scene 中的图元 Item 进行精确的双精度交互功能.Item 可以处理键盘事 ...
- [Python从零到壹] 三十八.图像处理基础篇之图像几何变换(平移缩放旋转)
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- OpenCV_04 几何变换:图像缩放+图像平移+图像旋转+仿射变换+透射变换+图像金字塔
1 图像缩放 缩放是对图像的大小进行调整,即使图像放大或缩小. API cv2.resize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINEAR) 参 ...
- 图像数据增强(平移,旋转,亮度变换,翻转,添加高斯噪声,缩放,裁剪)
1.平移: import cv2 import tensorflow as tf import numpy as np from PIL import Image from skimage impor ...
- opengl矩阵变换与平移缩放旋转
2019独角兽企业重金招聘Python工程师标准>>> 坐标系: 1.右手坐标系 2.左手坐标系 左手坐标系是X轴向右,Y轴向上,Z轴向前,右手坐标系的Z轴正好相反,是指向" ...
- 线性代数:矩阵变换图形(三维平移缩放旋转)
紧接上一篇:http://blog.csdn.net/yinhun2012/article/details/79544205 这篇博文我只是准备对上一篇博文的内容进行扩展,因为上一篇我写完二维xy仿射 ...
- C语言数字图像处理---1.5图像基本变换之平移缩放旋转
本篇作为新年到来前的最后一篇,提前祝大家新年快乐! 图像几何变换又叫做图像基本变换,主要包括图像平移.图像缩放和图像旋转几个部分,当然还有图像镜像等简单的内容.图像基本变换是图像处理的基本内容,是学习 ...
- iOS图片添加平移/缩放/旋转多个手势
// // UIImageView+Utils.h // OpenWorkr // // Created by 冰凉的枷锁 on 2017/3/6. // Copyright © 2017年 Eden ...
- C++-矩阵运算-Eigen-几何矩阵变换-常见几何参数求解-平移-缩放-旋转-仿射变换-垂足-面积-周长-方向角-按目标点和距离移动当前点
文章目录 1.矩阵运算规律 1.1.矩阵相乘结合律 1.2.矩阵相乘交换律 1.3.矩阵转置 1.4.矩阵的逆 2.仿射变换 2.1.平移变换 Translation 2.2.缩放变换 Scale 2 ...
最新文章
- 数据结构(C语言版) 第 八 章 排序 知识梳理 + 习题详解
- 滚动条的值如何赋值_如何给Word文本框添加滚动条?史上最详细步骤
- http https http2.0
- C语言求一个数的平方根倒数的近似值-一战封神的代码
- OCS UCCA 开发笔记(Unified Communications Client API)
- smale学习之数学表达式(day5)
- hibernate 多表查询
- G.703接口和E1接口区别
- 关于数据采集的配置方法
- 2.1用户界面设计的八项黄金法则
- 复合辛普森公式求解定积分 matlab
- 用iframe的方式 解决 window.open() 不能打开多个窗口的问题
- mysql numeric 空值_mysql数据库不能添加NULL值,该怎么解决 - numeric
- 无法加载文件 XXX,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft问题解决
- devexpress表格控件gridcontrol设置隔行变色、焦点行颜色、设置(改变)显示值、固定列不移动(附源码)...
- 最近在做的用户留存分析,和几种方法。
- javaCV入门指南:调用FFmpeg原生API和JavaCV是如何封装了FFmpeg的音视频操作?
- Sklearn机器学习——ROC曲线、ROC曲线的绘制和AUC面积、运用ROC曲线找到最佳阈值
- Java UDP 入门实例
- 从DDD到PaaS化再到一站式部署——通天塔后端通用版发展之路
热门文章
- HEIF 和 HEVC 研究
- 智慧车行预约小程序,汽车保养、维修、美容、检测预测小程序,前后端完整代码包括车行动态,养车常识,保养预约,维修预约,洗车美容预约
- 用PHP进行Web编程
- Android9.0默认将开发者选项中的OEM锁开关打开
- C/C++编程笔记:C++中的isspace()及其在计算空格字符中的应用
- Android 隐私数据_Android安全警告:10亿台安卓设备不再支持安全更新
- Tomcat优化总结
- 解决:ADODB.Stream 错误 '800a0bbc' 写入文件失败
- npm ERR! code E404 npm ERR! 404 no such package available : xxx
- 2022社区团购回暖,创新 O2O 生鲜电商新零售解决方案