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

news2024/10/6 18:26:27

矩阵和标量的运算

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.coloradmin.cn/o/1879694.html

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

相关文章

Django 页面展示模型创建表的数据

1,添加视图函数 Test/app8/urls.py from django.shortcuts import render from .models import Userdef create_user(request):if request.method POST:username request.POST.get(username)email request.POST.get(email)# ... 获取其他字段的值# 创建用户实例…

新手练习项目 7:猜数字游戏

名人说:莫听穿林打叶声,何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder) 目录 一、项目描述二、项目实现三、项目步骤四、项目扩展方向 更多项目内容,请关注我、订…

源码学习:文件描述符

在进程描述学习中,扯到了max_fds,接着就联想到了日常运维中常见的ulimit参数、sysctl内核参数,原来以为max_fds与这些个关联性比较强,但经过一早上折腾以后,发现其实还是有一些差距的。但是在学习过程中,却…

java基于ssm+jsp 固定资产管理系统

1前台首页功能模块 固定资产管理系统,在系统首页可以查看首页、设备信息、论坛信息、我的、跳转到后台等内容,如图1所示。 图1前台首页功能界面图 注册,在注册页面可以填写用户名、密码、姓名、性别、头像、身份证、手机等详细内容&#xff…

ASP.NET CORE应用针对IIS有哪两种部署模式?

一、ASP.NET CORE Core Module IIS其实也是按照管道的方式来处理请求的,但是IIS管道和ASP.NET CORE中间件管道有本质的不同。对于部署在IIS中的Web应用来说,从最初接收到请求到最终将响应发出去,这段处理流程被细分为一系列固定的步骤&#x…

设计模式-状态模式和策略模式

1.状态模式 1.1定义 当一个对象的内在状态改变时允许根据当前状态作出不同的行为; 1.2 适用场景 (1)一个对象的行为取决于它的状态,并且它必须在运行时根据状态来决定其行为. (2)代码中包含了大量的与状态有关的条件语句,例如:一个操作含有庞大的多分值语句(if…

【信息安全及等保】网络安全等级保护技术建议书(word原件)

1信息系统详细设计方案 1.1安全建设需求分析 1.1.1网络结构安全 1.1.2边界安全风险与需求分析 1.1.3运维风险需求分析 1.1.4关键服务器管理风险分析 1.1.5关键服务器用户操作管理风险分析 1.1.6数据库敏感数据运维风险分析 1.1.7“人机”运维操作行为风险综合分析 1.2…

3D打印随形水路在注塑生产中的显著优势

3D打印技术在模具制造中已崭露头角,特别是在注塑生产中,3D打印随形水路的应用正变得日益普遍。 首先,该技术能精准优化模具温度。3D打印随形水路随形冷却的设计让模具温度更加均匀,水路更贴近产品,有效提升产品品质和缩…

不知道自己的优势擅长和兴趣爱好,我该如何填报高考志愿选专业?

天生我才必有用,每个人都是独立的个体,拥有自己的优势和擅长,当然这个优势和擅长,不是和别人对比,而是和自己对比产生的。 如果说你不知道自己的优势擅长,不知道自己的兴趣和爱好,那只不过是你没…

李一桐遭遇蜈蚣惊魂

李一桐遭遇“蜈蚣惊魂”!刘宇宁展现真男人本色在娱乐圈的幕后,总有一些心跳加速的惊险。近日,李一桐在拍戏时遭遇了一场“蜈蚣惊魂”,让无数粉丝和网友为她捏了一把冷汗。而在这场惊险的遭遇中,刘宇宁展现出了真男人的…

[寄宿日记]韩漫日漫无删减完整版,免费在线观看漫画

[寄宿日记]韩漫日漫无删减完整版,免费在线观看漫画 不能多说,怕审-核不过,自己看图吧。 想要的在这里: https://blog.csdn.net/qq_42098517/article/details/140079915 https://gitee.com/zzwuweijun/manhua/blob/master/README…

【原理】机器学习中的最小二乘法公式推导过程

本文来自《老饼讲解-BP神经网络》https://www.bbbdata.com/ 目录 一、什么是最小二乘法1.1. 什么是最小二乘法1.2. 最小二乘法的求解公式 二、最小二乘法求解公式的推导 最小二乘法是基本的线性求解问题之一,本文介绍最小二乘法的原理,和最小二法求解公式…

【PyTorch单点知识】神经元网络模型剪枝prune模块介绍(上,非结构化剪枝)

文章目录 0. 前言1. 剪枝prune主要功能分类2. torch.nn.utils.prune中的方法介绍3. PyTorch实例3.1 BasePruningMethod3.2PruningContainer3.3 identity3.4random_unstructured3.5l1_unstructured 4. 总结 0. 前言 按照国际惯例,首先声明:本文只是我自己…

接口请求网关超时排查和引发的思考

问题描述 前端请求服务端接口,返回504 Gateway Timeout,请求接口为https://profile.noodles.com/user-mail-pub/api/user-mail/user-trash-mails?userId123456 原因分析 观察日志,发现网关链接超时,并且对应请求没有达到对应服…

四川省高等职业学校大数据技术专业建设暨专业质量监测研讨活动顺利开展

6月21日,省教育评估院在四川邮电职业技术学院组织开展全省高等职业学校大数据技术专业建设暨专业质量监测研讨活动。省教育评估院副院长赖长春,四川邮电职业技术学院党委副书记、校长冯远洪,四川邮电职业技术学院党委委员、副校长程德杰等出席…

【python】python知名品牌调查问卷数据分析可视化(源码+调查数据表)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

抓紧收藏!7 款令人惊艳的 AI 开源项目

🐼 关注我, 了解更多 AI 前沿资讯和玩法,AI 学习之旅上,我与您一同成长! 🎈 进入公众号,回复 AI, 可免费领取超多实用的 AI 资料 和内容丰富的 AI 知识库地址。 自从去年 AIGC 兴起以来,AI 开源…

gin 服务端无法使用sse流式nginx配置

我在本地使用 gin 可以流式的将大模型数据传递给前端。但是当我部署到服务器中时,会阻塞一段时间,然后显示一大段文本。 起初我怀疑是gin 没有及时将数据刷到管道中,但是经过测试,还是会阻塞。 c.Writer.(http.Flusher).Flush()最…

使用LabVIEW报告生成工具包时报错97

问题详情: 在运行使用Excel/Word调用节点的程序时,收到错误97:LabVIEW:(十六进制0x61)输入中传递了一个空引用句柄或先前已删除的引用句柄。 当运行报告生成工具包中的一个示例程序时,收到错误…

【python】python入门day2——数据类型与运算

python数据类型与运算 一、Python中变量的数据类型1、数据类型分类2、数值类型3、布尔类型4、字符串类型5、其他类型(了解) 二、Python数据类型转换1、使用Python实现超市的收银系统2、Python数据类型的转换方法3、总结 三、Python运算符1、算术运算符3、赋值运算符4、复合赋值…