计算机图形学笔记----矩阵

矩阵和标量的运算

M = \begin{bmatrix} m_{11} & m_{12} & m_{13} \\ m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \\ \end{bmatrix},则kM = k\begin{bmatrix} m_{11} & m_{12} & m_{13} \\ m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \\ \end{bmatrix}=\begin{bmatrix} km_{11} & km_{12} & km_{13} \\ km_{21} & km_{22} & km_{23} \\ km_{31} & km_{32} & km_{33} \\ \end{bmatrix}

矩阵与矩阵相乘

r\times n的矩阵A,n\times c的矩阵B。两矩阵A\times B,结果为r\times c的矩阵,第一个矩阵的列数必须和第二个矩阵的行数相同,否则不能相乘

C=A\times BC中的每个元素等于A的第i行所对应的矢量和B的第j列所对应的矢量进行矢量点乘的结果

c_{ij}=a_{i1}b_{1j}+a_{i2}b_{2j}+\cdot \cdot \cdot +a_{im}b_{nj}

注意:矩阵乘法不满足交换律AB\neq BA

矩阵乘法满足结合律\left ( AB \right )C=A\left ( BC \right )

Shader中常用矩阵

1.方块矩阵(方阵)(square matrix):行数和列数相等的矩阵。

2.对角矩阵:如果一个方阵除了对角元素外的所有元素都为0,那么这个方阵为对角矩阵。

3.单位矩阵:特殊的对角矩阵,用I_n表示,例如3\times 3的单位矩阵为I_3=\begin{bmatrix} 1 & 0 & 0\\ 0&1 &0 \\ 0&0 & 1 \end{bmatrix}。 

4.转置矩阵:原矩阵i\times jM_{ij},它的转置表示为M_{ij}^T,转置矩阵的运算为原矩阵的第i行变成第i列,第j列变成第j行。

M_{ij}^T =M_{ji},示例\begin{bmatrix} 1 & 2 & 3 &4 \\ 5& 6 & 7 & 8 \end{bmatrix}^T=\begin{bmatrix} 1 & 5 \\ 2 & 6 \\ 3 & 7 \\ 4 & 8 \\ \end{bmatrix}

转置矩阵常用性质

性质一:矩阵转置的转置等于原矩阵        (M^T)^T=M

性质二:矩阵串接的转置等于反向串接各个矩阵的转置        (AB)^T=B^TA^T

5.逆矩阵

给定一个矩阵M,它的逆矩阵为M^{-1},把MM^{-1}相乘,结果为一个单位矩阵,即M\times M^{-1}=I

矩阵有逆矩阵的前提为该矩阵为方阵且并非所有元素都为0。

逆矩阵的常用性质

性质一:逆矩阵的逆矩阵是原矩阵本身,即(M^{-1})^{-1}=M

性质二:单位矩阵的逆矩阵是它本身,即I^{-1}=I

性质三:转置矩阵的逆矩阵是逆矩阵的转置,即(M^T)^{-1}=(M^{-1})^T

性质四:矩阵串接相乘后的逆矩阵等于反向串接各个矩阵的逆矩阵,即(ABC)^{-1}=C^{-1}B^{-1}A^{-1}

三维变换与投影

现实世界是三维的,要在二维屏幕上绘制出三维场景需要通过投影变换降低维数。

三维变换矩阵

三维变换引入齐次坐标,在四维空间内进行研究。

三维变换可表示为某一变换矩阵与物体顶点集合的齐次坐标矩阵相乘的形式,三维变换矩阵是4\times 4的方阵。

例如:

M=\begin{bmatrix} a &b &c &l \\ d &e &f &m \\ g &h &i &n \\ p &q &r &s \end{bmatrix}

M_1=\begin{bmatrix} a &b &c \\ d &e &f \\ g &h &i \end{bmatrix}3\times3的子矩阵,用于对物体进行比例、旋转、反射、错切变换

M_2=\begin{bmatrix} l \\ m\\ n \end{bmatrix}3\times 1的子矩阵,用于对物体进行平移变换。

M_3=\begin{bmatrix} p &q &r \end{bmatrix}1\times 3子矩阵,用于对物体进行投影变换

M_4=\begin{bmatrix} s \end{bmatrix}1\times 1子矩阵,用于对物体进行整体比例变换

三维变换形式

三维变换的基本方法是把矩阵作为算子,作用到变换前的物体顶点集合的齐次坐标矩阵上,得到变换后新的顶点集合的齐次坐标矩阵,连接新的物体顶点,可绘制出变换后的三维物体模型。

设变换前的物体顶点矩阵

P=\begin{bmatrix} x_0 &x_1 &... &x_{n-1} \\ y_0 &y_1 &... &y_{n-1} \\ z_0 &z_1 &... &z_{n-1} \\ 1 &1 &... &1 \end{bmatrix}

变换后的物体顶点矩阵

P^{'} = \begin{bmatrix} x_0^{'} &x_1^{'} &... &x_{n-1}^{'} \\ y_0^{'} &y_1^{'} &... &y_{n-1}^{'} \\ z_0^{'} &z_1^{'} &... &z_{n-1}^{'} \\ 1 &1 &... &1 \end{bmatrix}

则三维变换公式为P^{'}=M\cdot P,即

\begin{bmatrix} x_0^{'} &x_1^{'} &... &x_{n-1}^{'} \\ y_0^{'} &y_1^{'} &... &y_{n-1}^{'} \\ z_0^{'} &z_1^{'} &... &z_{n-1}^{'} \\ 1 &1 &... &1 \end{bmatrix}= \begin{bmatrix} a &b &c &l \\ d &e &f &m \\ g &h &i &n \\ p &q &r &s \end{bmatrix} \begin{bmatrix} x_0 &x_1 &... &x_{n-1} \\ y_0 &y_1 &... &y_{n-1} \\ z_0 &z_1 &... &z_{n-1} \\ 1 &1 &... &1 \end{bmatrix}

三维基本变换

三维基本变换是指将P(x,y,z)点从一个坐标位置变换到另一个坐标位置P^{'}(x^{'},y^{'},z^{'})的过程,是相对于坐标系或坐标轴进行的几何变换

平移变换

T_xT_yT_z为平移参数

平移变换的坐标表示为\left\{\begin{matrix} x^{'}=x+T_x\\ y^{'}=y+T_y\\ z^{'}=z+T_z \end{matrix}\right.

三维平移变换矩阵为M=\begin{bmatrix} 1 &0 &0 &T_x \\ 0 &1 &0 &T_y \\ 0 &0 &1 &T_z \\ 0 &0 &0 &1 \end{bmatrix}

比例变换

S_xS_yS_z为比例系数

比例变换的坐标表示为\left\{\begin{matrix} x^{'}=xS_x\\ y^{'}=yS_y\\ z^{'}=zS_z \end{matrix}\right.

三维比例变换矩阵为M=\begin{bmatrix} S_x &0 &0 &0\\ 0 &S_y &0 &0 \\ 0 &0 &S_z &0 \\ 0 &0 &0 &1 \end{bmatrix}

旋转变换

三维旋转变换一般看作二维旋转变换的组合,可分为绕x轴旋转、绕y轴旋转、绕z轴旋转,绕坐标轴旋转角用\beta表示,\beta正向定义符合右手螺旋定则,大拇指指向旋转轴正向,其余四指的转向为转角的正向。

x轴旋转

\beta为正向旋转角

x轴旋转变换的坐标表示为\left\{\begin{matrix} x^{'}=x\\ y^{'}=y\cos\beta -z\sin \beta \\ z^{'}=y\sin\beta+z\cos\beta\end{matrix}\right.

x轴旋转三维变换矩阵为M=\begin{bmatrix} 1 &0 &0 &0\\ 0 &\cos\beta &-\sin\beta &0 \\ 0 &\sin\beta &\cos\beta &0 \\ 0 &0 &0 &1 \end{bmatrix}

y轴旋转

\beta为正向旋转角

y轴旋转变换的坐标表示为\left\{\begin{matrix} x^{'}=x\cos\beta+z\sin\beta\\ y^{'}=y \\ z^{'}=-x\sin\beta+z\cos\beta\end{matrix}\right.

y轴旋转三维变换矩阵为M=\begin{bmatrix} \cos\beta &0 &\sin\beta &0\\ 0 &1 &0 &0 \\ -\sin\beta &0 &\cos\beta &0 \\ 0 &0 &0 &1 \end{bmatrix}

z轴旋转

\beta为正向旋转角

z轴旋转变换的坐标表示为\left\{\begin{matrix} x^{'}=x\cos\beta-y\sin\beta\\ y^{'}=x\sin\beta+y\cos\beta \\ z^{'}=z \end{matrix}\right.

z轴旋转三维变换矩阵为M=\begin{bmatrix} \cos\beta &-\sin\beta &0 &0\\ \sin\beta &\cos\beta &0 &0 \\ 0 &0 &1&0 \\ 0 &0 &0 &1 \end{bmatrix}

反射变换

三维反射分为关于坐标轴的反射和关于坐标平面的反射两类

关于x轴的反射

关于x轴反射变换的坐标表示为\left\{\begin{matrix} x^{'}=x\\ y^{'}=-y \\ z^{'}=-z \end{matrix}\right.

关于x轴的三维反射变换矩阵为M=\begin{bmatrix} 1 &0 &0 &0\\ 0 &-1 &0 &0 \\ 0 &0 &-1 &0 \\ 0 &0 &0 &1 \end{bmatrix}

关于y轴的反射

关于y轴反射变换的坐标表示为\left\{\begin{matrix} x^{'}=-x\\ y^{'}=y \\ z^{'}=-z \end{matrix}\right.

关于y轴的三维反射变换矩阵为M=\begin{bmatrix} -1 &0 &0 &0\\ 0 &1 &0 &0 \\ 0 &0 &-1 &0 \\ 0 &0 &0 &1 \end{bmatrix}

关于z轴的反射

关于z轴反射变换的坐标表示为\left\{\begin{matrix} x^{'}=-x\\ y^{'}=-y \\ z^{'}=z \end{matrix}\right.

关于z轴的三维反射变换矩阵为M=\begin{bmatrix} -1 &0 &0 &0\\ 0 &-1 &0 &0 \\ 0 &0 &1 &0 \\ 0 &0 &0 &1 \end{bmatrix}

关于xOy平面的反射

关于xOy平面反射变换的坐标表示为\left\{\begin{matrix} x^{'}=x\\ y^{'}=y \\ z^{'}=-z \end{matrix}\right.

关于xOy平面的三维反射变换矩阵为M=\begin{bmatrix} 1 &0 &0 &0\\ 0 &1 &0 &0 \\ 0 &0 &-1 &0 \\ 0 &0 &0 &1 \end{bmatrix}

关于yOz平面的反射

关于yOz平面反射变换的坐标表示为\left\{\begin{matrix} x^{'}=-x\\ y^{'}=y \\ z^{'}=z \end{matrix}\right.

关于yOz平面的三维反射变换矩阵为M=\begin{bmatrix} -1 &0 &0 &0\\ 0 &1 &0 &0 \\ 0 &0 &1 &0 \\ 0 &0 &0 &1 \end{bmatrix}

关于zOx平面的反射

关于zOx平面反射变换的坐标表示为\left\{\begin{matrix} x^{'}=x\\ y^{'}=-y \\ z^{'}=z \end{matrix}\right.

关于zOx平面的三维反射变换矩阵为M=\begin{bmatrix} 1 &0 &0 &0\\ 0 &-1 &0 &0 \\ 0 &0 &1 &0 \\ 0 &0 &0 &1 \end{bmatrix}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/758761.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【滚动哈希】2156. 查找给定哈希值的子串

本文涉及知识点 滚动哈希 LeetCode2156. 查找给定哈希值的子串 给定整数 p 和 m ,一个长度为 k 且下标从 0 开始的字符串 s 的哈希值按照如下函数计算: hash(s, p, m) (val(s[0]) * p0 val(s[1]) * p1 … val(s[k-1]) * pk-1) mod m. 其中 val(s[…

015、HBase分布式数据库与传统数据库的深度对比

目录 HBase分布式数据库与传统数据库的深度对比 1. 数据模型 1.1 传统关系型数据库 1.2 HBase 2. 扩展性 2.1 传统关系型数据库 2.2 HBase 3. 查询语言 3.1 传统关系型数据库 3.2 HBase 4. 事务支持 4.1 传统关系型数据库 4.2 HBase 5. 数据一致性 5.1 传统关系型…

《C语言》编译和链接

文章目录 一、翻译环境1、预处理2、编译3、汇编4、链接 二、运行环境 一、翻译环境 在使用编译器编写代码时,编写的代码是高级语言,机器无法直接识别和运行,在编译器内部会翻译成机器可执行的机器语言。 编译环境由编译和链接两大过程组成。 …

深度之眼(二十九)——神经网络基础知识(四)-循环神经网络

文章目录 一、 学习目标二、序列数据三、语言模型四、循环神经网络4.1 RNN的反向传播 五、门控循环单元-GNU5.1 候选隐藏状态 六、长短期记忆网络-LSTM七、回顾 一、 学习目标 二、序列数据 序列数据是常见的数据类型,前后数据通常具有关联性 三、语言模型 综合…

PyQt问题汇总(持续更新)

目录 1.抛出异常后QAppliaction自动闪退 2.Unbuntu共享文件夹自动挂载 1.抛出异常后QAppliaction自动闪退 开发阶段,PyQt5 QAppliaction会在遇到未捕获的异常时立即退出,它能够快速发现并报告错误,我在调用一些密码算法库的时候&#xff0…

传媒行业指哪些?需要过等保吗?

传媒,一个人人都接触的行业。相信大家都听过传媒,但具体传媒行业是指什么,包括哪些,详细很多人都不了解。这不一些人在问,传媒行业指哪些?需要过等保吗?这里跟我们小编一起来讨论讨论吧&#xf…

SpringMVC 域对象共享数据

文章目录 1、使用ServletAPI向request域对象共享数据2、使用ModelAndView向request域对象共享数据3、使用Model向request域对象共享数据4、使用map向request域对象共享数据5、使用ModelMap向request域对象共享数据6、Model、ModelMap、Map的关系7、向session域共享数据8、向app…

Pikachu 不安全的文件下载(Unsafe file download)概述 附漏洞利用案例

目录 获取下载链接 修改链接 重新构造链接 拓展 不安全的文件下载概述 文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求…

PyCharm 2024.1 版本更新亮点:智能编程,高效协作

目录 1. 前言2. 更新内容2.1 智能编码体验2.1.1 Hugging Face 文档预览2.1.2 全行代码补全 2.2 提升编辑器体验2.2.1 粘性行功能2.2.2 编辑器内代码审查 2.3 全新终端体验(测试版)2.3.1 新终端 Beta 2.4 智能助手(特定版本和专业用户&#xf…

Springboot学习中错误与解决方法合集

1. 报错CONDITIONS EVALUATION REPORT (1)现象 类似: 出现问题原因:日志文件过多 (2) 解决方法: 在application.yml配置文件中增加 logging:level:org.springframework.boot.autoconfigure…

grpc编译

1、cmake下载 Download CMakehttps://cmake.org/download/cmake老版本下载 Index of /fileshttps://cmake.org/files/2、gprc源码下载,发现CMAKE报错 3、使用git下载 1)通过git打开一个目录:如下grpc将放在D盘src目录下 cd d: cd src2&am…

每天五分钟深度学习框架pytorch:tensor向量之间常用的运算操作

本文重点 在数学中经常有加减乘除运算,在tensor中也不例外,也有类似的运算,本节课程我们将学习tensor中的运算 常见运算 加法+或者add import torch import numpy as np a=torch.rand(16,3,28,28) b=torch.rand(1,3,28,28) print(a+b) import torch import numpy as np a…

前端Web开发HTML5+CSS3+移动web视频教程 Day3 CSS 第1天

P29 - P43 从此开始进入 CSS 的学习。前面都是 HTML 的学习。 CSS 的作用:美化。 HTML 只是规定了网页内容有哪些,在网页中显示的位置默认是从上到下显示,还带有默认效果,比如超链接有颜色有下划线,无序列表有小圆点…

CocosCreator构建IOS教程

CocosCreator构建IOS教程 添加include: Header Search Paths:拖拽include过来 添加SoundEngine: Header Search Paths: 把SoundEngine POSIX Common 三个文件夹拖拽到里面去

操作系统精选题(二)(综合模拟题一)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀操作系统 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 前言 简答题 一、进程由计算和IO操作组…

读AI新生:破解人机共存密码笔记16对人工智能的治理

1. 愚蠢的、情绪化的人类 1.1. 与完美理性所设定的不可企及的标准相比,我们都是极其愚蠢的,我们受制于各种情绪的起伏,这些情绪在很大程度上支配着我们的行为 1.2. 为了充分了解人类的认知,我们(或者更确切地说&…

Java进阶-try-with-resources

Java进阶-try-with-resources try-with-resources 是什么传统使用try-catch-finally关闭资源使用try-with-resources什么时候用 try-with-resources 是什么 try-with-resources 是 Java 7 中引入的一个新特性,用于简化资源管理,一般是用于处理实现了 Au…

二叉树从根节点出发的所有路径

二叉树从根节点出发的所有路径 看上图中 二叉树结构 从根节点出发的所有路径 如下 6->4->2->1 6->4->2->3 6->4->5 6->8->7 6->8->9 逻辑思路: 按照先序遍历 加 回溯法 实现 代码如下 // 调用此方法,将根节点传递…

[2024-6-30]如何获取OpenAI API Key/OpenAI密钥

一、前言 由于官网页面更新,获取路径与之前有所不同。 二、获取路径 1.点击Products,再点击API login 2.点击API 3. 如果需要登录,则登录 4.点击API keys,再点击Create new secret key

python-求出 e 的值

[题目描述] 利用公式 e11/1!1/2!1/3!⋯1/𝑛!,求 e 的值,要求保留小数点后 10 位。输入: 输入只有一行,该行包含一个整数 n,表示计算 e 时累加到1/n!。输出: 输出只有一行,该行包含计…