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

矩阵和标量的运算

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}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django靓号管理系统:实现用户列表功能

在本篇博文中,我们将介绍如何在Django靓号管理系统中实现用户列表功能。这个功能允许管理员查看系统中所有用户的基本信息。我们将逐步讲解如何设置URL路由、创建视图函数以及设计模板。 1. 设置URL路由 首先,我们需要在​​urls.py​​文件中添加一个新的URL路径,以便访问…

云计算【第一阶段(22)】Linux的进程和计划任务管理

目录 一、查看进程 1.1、程序和进程的关系 1.2、查看进程 1.2.1、静态查看进程信息ps ​编辑 1.2.1.1、实验 1.2.2、动态查看进程信息top 1.2.2.1、实验 1.2.2.2、top 命令全屏操作界面快捷键 1.2.3、pgrep根据特定条件查询进程pid信息 1.2.4、pstree命令以树形结构列出…

CentOS系统日志入门

日志清单 系统的引导日志:/var/log/boot.log核心启动日志:/var/log/dmesg系统报错日志:/var/log/messages邮件系统日志:/var/log/maillogFTP系统日志:/var/log/xferlog安全信息和系统登录与网络连接的信息:/var/log/secureNews日志:/var/log/spoolerRPM软件包:/var/log/rpmpkg…

Android 常用ADB命令

文章目录 Android 常用ADB命令概述adb 的工作原理命令adb命令shell命令 使用adb服务器操作设备操作应用文件操作activity操作日志操作 Android 常用ADB命令 概述 Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信。adb 命令可用于执行各种设…

Avue框架学习

Avue框架学习 我们的项目使用的框架是 Avue 在我看来这个框架最大的特点是可以基于JSON配置页面上的From,Table以及各种各样的输入框等,不需要懂前端就可以很快上手,前提是需要多查一下文档 开发环境搭建 由于我本地的环境全是用docker来搭建的,所以我依然选择用docker搭建我…

万字浅析视频搜索系统中的多模态能力建设

万字浅析视频搜索系统中的多模态能力建设 FesianXu 20240331 at Tencent WeChat search team 前言 视频搜索是天然的富媒体检索场景,视觉信息占据了视频的一大部分信息量,在视频搜索系统中引入多模态能力,对于提高整个系统的能力天花板至关重…

机器人控制系列教程之任务空间运动控制器搭建(1)

任务空间运动控制简介 任务空间运动控制—位置被指定给控制器作为末端执行器的姿态。然后,控制器驱动机器人的关节配置到使末端执行器移动到指定姿态的值。这有时被称为操作空间控制。 任务空间运动模型表示机器人在闭环任务空间位置控制下的运动,可使用…

python基础:高级数据类型:集合

1、集合的定义 集合是一个无序且无重复元素的列表。其定义与数学定义一致。其无序和不重复和字典特征类似,但是无“值”。 2、集合的创建 集合一般由列表创建,在初始化列表时保证其元素唯一性,即为集合。 创建方法:x set(list…

汽车电子工程师入门系列——AUTOSAR通信服务框架(下)

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

GitHub每周最火火火项目(6.24-6.30)

项目名称:dortania / OpenCore - Legacy - Patcher 项目介绍:该项目旨在让用户体验如同以前一样的macOS。它可能提供了一种方式来解决在某些情况下,用户无法正常使用或升级macOS的问题。通过使用OpenCore - Legacy - Patcher,用户…

python格式文件

python小白考后复习 CSV格式文件ini格式文件我们可以读取所有节点还可以输出一个节点下所有键值对组成的元组获取节点下的键对应的值判断节点是否存在添加节点还可以添加键值还可以删除节点 XML格式文件读取若是文件格式存在的xml若是以字符串形式存在的xml获取子标签还有获取子…

【分布式计算框架 MapReduce】高级编程—搜索日志数据分析

目录 一、对于 sogou_500w_utf 数据,使用 MapReduce 编程模型完成对以下数据的分析任务 1. 统计 2011-12-30 日搜索记录,每个时间段的搜索次数 (1)运行截图 (2) 源代码 2. 统计 2011-12-30 日 3 点至 …

2024最新初级会计职称题库来啦!!!

16.根据增值税法律制度的规定,下列各项中,属于"提供加工、修理修配劳务"的是()。 A.修理小汽车 B.修缮办公楼 C.爆破 D.矿山穿孔 答案:A 解析:选项AB:修理有形动产(…

【PL理论深化】(13) 变量与环境:文法结构 | 真假表达式:isZero E | let 表达式叠放 | 定义的规则 | 条件语句的使用

💬 写在前面:从现在开始,让我们正式设计和实现编程语言。首先,让我们扩展在之前定义的整数表达式语言,以便可以使用变量和条件表达式。 目录 0x00 文法结构 0x01 真假表达式:isZero E 0x02 let 表达式叠…

Elasticsearch 第四期:搜索和过滤

序 2024年4月,小组计算建设标签平台,使用ES等工具建了一个demo,由于领导变动关系,项目基本夭折。其实这两年也陆陆续续接触和使用过ES,两年前也看过ES的官网,当时刚毕业半年多,由于历史局限性导…

Java有没有goto语句

一、技术细节 Java作为一种广泛使用的编程语言,其设计哲学强调清晰、简洁和易于维护。在技术细节层面,Java确实支持goto语句作为关键字,但在实际编程中,goto语句并不被推荐使用。Java中的goto是保留字,主要用于两个场…

chrome-base源码分析(1)macros模块

Chrome-base源码分析(2)之Macros模块 Author:Once Day Date:2024年6月29日 漫漫长路,才刚刚开始… 全系列文章请查看专栏: 源码分析_Once-Day的博客-CSDN博客 参考文档: macros - Chromium Code SearchChrome base 库详解:工…

安全架构概述_2.安全架构的定义和范围

安全架构是架构面向安全性方向上的一种细分,比如细分领域含有运维架构、数据库架构等。如果安全性体现在产品上,那么,通常的产品安全架构、安全技术体系架构和审计架构可组成三道防线。 (1)产品安全架构:构…

ArtTS系统能力-通知的学习(3.1)

上篇回顾: ArtTS语言基础类库-容器类库内容的学习(2.10.2) 本篇内容: ArtTS系统能力-通知的学习(3.1) 一、 知识储备 1. 基础类型通知 按内容分成四类: 类型描述NOTIFICATION_CONTENT_BASIC_TEXT普通文…

2024 Parallels Desktop for Mac 功能介绍

Parallels Desktop的简介 Parallels Desktop是一款由Parallels公司开发的桌面虚拟化软件,它允许用户在Mac上运行Windows和其他操作系统。通过强大的技术支持,用户无需重新启动电脑即可在Mac上运行Windows应用程序,实现了真正的无缝切换。 二…