当前位置: 首页 > article >正文

图形学:Transform矩阵(3维 2维) 平移,旋转,缩放

0. 简介

在图形学领域中,Transform矩阵(变换矩阵)是一种表示图形对象在二维或三维空间中的位置、方向和大小变化的数学工具。它们用于执行各种图形变换,如平移、旋转、缩放。Transform矩阵通常表示为一个二维或三维矩阵,具体形式取决于空间的维度。

0.1 二维变换矩阵

  • 在二维图形学中,通常使用3x3的矩阵表示变换,其中最后一行通常是[0, 0, 1],因为二维变换不影响z轴。这个矩阵可以表示平移、旋转、缩放和剪切。
  • 例如,一个简单的二维平移矩阵可以写成:
   [ 1  0  tx ]
   [ 0  1  ty ]
   [ 0  0  1  ]

其中txty是平移的水平和垂直距离。

0.2 三维变换矩阵

  • 在三维图形学中,通常使用4x4的矩阵表示变换,其中最后一列通常是[0, 0, 0, 1]。这种矩阵可以表示平移、旋转、缩放以及更复杂的变换。
  • 一个简单的三维平移矩阵可以写成:
   [ 1  0  0  tx ]
   [ 0  1  0  ty ]
   [ 0  0  1  tz ]
   [ 0  0  0  1  ]

其中txtytz是平移的xyz轴距离。

不管是二维变换矩阵还是三维变换矩阵,它的最后一行都是齐次坐标,通常是[0, ... , 1]用于处理齐次坐标,使得可以用矩阵乘法来同时处理旋转和平移。

1. 举个例子

1.1 平移

给定的初始 Transform 矩阵如下:

[ 1  0  0  tx ]
[ 0  1  0  ty ]
[ 0  0  1  tz ]
[ 0  0  0  1  ]

希望在 x 轴增加 2 个单位,y 轴增加 1 个单位,z 轴减小 3 个单位。

1.1.1 计算过程

  1. 对 x 轴进行增加 2 个单位: 可以将 tx(原始平移量)增加 2 个单位。
  2. 对 y 轴进行增加 1 个单位: 将 ty(原始平移量)增加 1 个单位。
  3. 对 z 轴进行减小 3 个单位: 要使物体沿 z 轴负方向移动,需要将 tz 减小 3 个单位。

1.1.2 计算结果

[ 1  0  0  tx + 2 ]
[ 0  1  0  ty + 1 ]
[ 0  0  1  tz - 3 ]
[ 0  0  0     1   ]

这个新的矩阵表示了对原始物体进行了所需的平移操作。

1.2 旋转

1.2.1 2维旋转矩阵

```css
[ cos(θ)   -sin(θ) ]
[ sin(θ)    cos(θ) ]

1.2.1 3维旋转矩阵

  • 绕x轴旋转矩阵
[ 1     0        0      0 ]
[ 0  cos(θ)   -sin(θ)   0 ]
[ 0  sin(θ)    cos(θ)   0 ]
[ 0     0        0      1 ]
  • z轴旋转
[ cos(θ)  -sin(θ)   0   0 ]
[ sin(θ)   cos(θ)   0   0 ]
[    0       0      1   0 ]
[    0       0      0   1 ]
  • 绕y轴旋转
[ cos(θ)   0   sin(θ)   0 ]
[    0     1      0     0 ]
[-sin(θ)   0   cos(θ)   0 ]
[    0     0      0     1 ]

原始的Transform矩阵T与旋转矩阵R相乘,得到新的Transform矩阵 T'
T' = T * R

1.3 缩放

1.3.1 缩放矩阵

[ sx  0   0   0 ]
[ 0   sy  0   0 ]
[ 0   0   sz  0 ]
[ 0   0   0   1 ]

原始的Transform矩阵T与缩放矩阵S相乘,得到新的Transform矩阵 T'
T' = T * S


http://www.kler.cn/news/233898.html

相关文章:

  • 力扣738单调递增的数字思路以及贪心总结
  • centos 7.6 安装 openldap 2.5.17
  • Spring基础 - SpringMVC请求流程和案例
  • 图神经网络与图表示学习: 从基础概念到前沿技术
  • 【Linux】POSIX信号量基于环形队列的生产消费模型
  • Go基础知识学习-习题题解
  • 2024年度十余爆款爱心表白代码,还不进来瞅瞅?(一)
  • Git的基础操作指令
  • java大数据hadoop2.9.2 Flume安装操作
  • Jupyter Notebook如何在E盘打开
  • 机器学习系列——(十八)K-means聚类
  • Vue-56、Vue技术路由的使用
  • 【大数据面试题】005 谈一谈 Flink Watermark 水印
  • 突破编程_C++_面试(基础知识(9))
  • 飞书上传图片
  • FPS游戏框架漫谈第二十天
  • 【大厂AI课学习笔记】【1.5 AI技术领域】(10)对话系统
  • C++ 位运算
  • Github 2024-02-06 开源项目日报Top9
  • 波奇学Linux:文件重定向和虚拟文件系统
  • 2024年 前端JavaScript入门到精通 第一天
  • 2-8 单链表+双链表+模拟栈+模拟队列
  • [Angular 基础] - 指令(directives)
  • Go语言每日一题——链表篇(七)
  • ANSI Escape Sequence 下落的方块
  • Stable Diffusion 模型下载:ToonYou(平涂卡通)
  • python实现k路归并排序
  • 在gtkmm4 中检索子控件 (children)
  • 人工智能|深度学习——使用多层级注意力机制和keras实现问题分类
  • 70.SpringMVC怎么和AJAX相互调用的?