矩阵

一个4x3矩阵(4行,3列)

方阵
行数和列数相同的矩阵

对角矩阵
所有非对角元素为0

单位矩阵

向量作为矩阵

一个n维向量能被当做1xN矩阵或Nx1矩阵。

矩阵的转置
沿着矩阵的对角线翻转

向量的转置

标量和向量的乘法

矩阵和矩阵相乘


2x2矩阵相乘


3x3矩阵相乘


乘法定律

不满足交换率 ( AB!=BA A B ! = B A AB != BA)
满足结合律 ( (AB)C=A(BC) ( A B ) C = A ( B C ) (AB)C = A(BC) 和标量,向量相乘同样满足)

矩阵积的转置相当于先转置矩阵然后以相反的顺序相乘

向量和矩阵的乘法
1x3矩阵乘3x3矩阵

3x3矩阵乘3x1矩阵

不满足之前提到的规律


DX中使用行向量,openGL使用列向量

几何解释

一般来说,方阵能描述任意线性变换

旋转
缩放
投影
镜像
仿射

根据三角形法则可以将向量转化为以下形式




p, q, r 为 +x, +y, +z 方向的单位基向量
v=px+qy+rz v = p x + q y + r z v = px + qy + rz
p, q, r 为行构建3x3矩阵

矩阵的每一行都能解释为旋转后的基向量

2D中的变换


3D中的变换

旋转

2D旋转矩阵


3D旋转
旋转需要知道方向的正负(左手法则,右手法则)
大拇指指向旋转轴的正方向,此时,四指玩去的方向就是旋转的正方形


绕X轴旋转


绕Y轴旋转


绕Z轴旋转


绕任意轴旋转

v′=vR(n,θ) v ′ = v R ( n , θ ) v' = vR(n, θ) (n为单位向量,θ为旋转角度)

推导


将V分解为平行于n的VⅡ,和垂直于n的V⊥
V=VⅡ+V⊥ V = V Ⅱ + V ⊥ V = VⅡ+ V⊥
V′=VⅡ′+V⊥′ V ′ = V Ⅱ ′ + V ⊥ ′ V' = VⅡ'+ V⊥'
∵VⅡ′//n ∵ V Ⅱ ′ / / n ∵ VⅡ' // n
∴V′=VⅡ+V⊥′ ∴ V ′ = V Ⅱ + V ⊥ ′ ∴ V' = VⅡ+ V⊥'
∵VⅡ是V在n上的投影 ∵ V Ⅱ 是 V 在 n 上 的 投 影 ∵ VⅡ是V在n上的投影
∴VⅡ=(nV)n|n|2 ∴ V Ⅱ = ( n V ) n | n | 2 ∴ VⅡ = \frac{(nV)n}{|n|^2}
∵n为单位向量 ∵ n 为 单 位 向 量 ∵ n为单位向量
∴VⅡ=(nV)n ∴ V Ⅱ = ( n V ) n ∴ VⅡ = (nV)n
∵V=VⅡ+V⊥ ∵ V = V Ⅱ + V ⊥ ∵ V = VⅡ+ V⊥
∴V⊥=V−VⅡ ∴ V ⊥= V − V Ⅱ ∴ V⊥ = V - VⅡ
∴V⊥=V−(nV)n ∴ V ⊥= V − ( n V ) n ∴ V⊥ = V - (nV)n
假设w为同时垂直于VⅡ,V⊥的向量,并且长度和V⊥相同,w和V⊥同时垂直于n的平面且w是V⊥绕n旋转90度的结果 假 设 w 为 同 时 垂 直 于 V Ⅱ , V ⊥ 的 向 量 , 并 且 长 度 和 V ⊥ 相 同 , w 和 V ⊥ 同 时 垂 直 于 n 的 平 面 且 w 是 V ⊥ 绕 n 旋 转 90 度 的 结 果 假设w为同时垂直于VⅡ,V⊥的向量,并且长度和V⊥相同,w和V⊥同时垂直于n的平面且w是V⊥绕n旋转90度的结果
∴w=n×V⊥ ∴ w = n × V ⊥ ∴ w = n×V⊥
=n×(V−VⅡ) = n × ( V − V Ⅱ ) = n×(V - VⅡ)
=n×V−n×VⅡ = n × V − n × V Ⅱ = n×V - n×VⅡ
=n×V−0 = n × V − 0 = n×V - 0
=n×V = n × V = n×V
V⊥′=V⊥cosθ+wsinθ V ⊥ ′ = V ⊥ c o s θ + w s i n θ V⊥' = V⊥cosθ + wsinθ
=(V−(nV)n)cosθ+(n×V)sinθ = ( V − ( n V ) n ) c o s θ + ( n × V ) s i n θ = (V - (nV)n)cosθ+(n×V)sinθ
V′=V⊥′+VⅡ V ′ = V ⊥ ′ + V Ⅱ V' = V⊥' + VⅡ
=(V−(nV)n)cosθ+(n×V)sinθ+(nV)n = ( V − ( n V ) n ) c o s θ + ( n × V ) s i n θ + ( n V ) n = (V - (nV)n)cosθ+(n×V)sinθ + (nV)n

已经得到V’与v,n,θ的关系了,所以可以求出个基向量



缩放

2D缩放


3D缩放

沿任意方向缩放


n为缩放方向上的单位向量,k为缩放系数 n 为 缩 放 方 向 上 的 单 位 向 量 , k 为 缩 放 系 数 n为缩放方向上的单位向量,k为缩放系数
V′=VⅡ′+V⊥′ V ′ = V Ⅱ ′ + V ⊥ ′ V' = VⅡ'+ V⊥'
∵V⊥′⊥n ∵ V ⊥ ′ ⊥ n ∵ V⊥' ⊥ n
∴V⊥′=V⊥ ∴ V ⊥ ′ = V ⊥ ∴ V⊥' = V⊥
∴V′=VⅡ′+V⊥ ∴ V ′ = V Ⅱ ′ + V ⊥ ∴ V' = VⅡ'+ V⊥
VⅡ′=kVⅡ V Ⅱ ′ = k V Ⅱ VⅡ' = kVⅡ
∴V′=kVⅡ+V⊥ ∴ V ′ = k V Ⅱ + V ⊥ ∴ V' = kVⅡ + V⊥
∵V⊥=V−VⅡ ∵ V ⊥= V − V Ⅱ ∵ V⊥ = V - VⅡ
VⅡ=(nV)n V Ⅱ = ( n V ) n VⅡ = (nV)n
∴V′=k(nV)n+V−(nV)n ∴ V ′ = k ( n V ) n + V − ( n V ) n ∴ V' = k(nV)n + V - (nV)n
=V+(k−1)(nV)n = V + ( k − 1 ) ( n V ) n = V + (k - 1)(nV)n

所以可以得出个基向量
2D缩放


3D缩放


镜像

2D镜像


3D镜像

组合变换

最常见的比如mvp矩阵

变换分类

线性变换

F(a+b)=F(a)+F(b) F ( a + b ) = F ( a ) + F ( b ) F(a+b) = F(a) + F(b)
F(ka)=kF(a) F ( k a ) = k F ( a ) F(ka) = kF(a)

仿射变换
仿射变换指线性变换后接着平移,因此仿射变换是线性变换的超集
可逆变换
如果存在一个逆变换可以撤销原变换,那么该变换可逆,除了投影变换其他基本变换均可逆,求逆矩阵等价于求矩阵的逆
等角变换
正交变换的基本思想是轴保持相互垂直,而且不进行缩放变换,平移,旋转,镜像是仅有的正交变换,正交矩阵的行列式为±1,所有正交矩阵都是仿射和可逆的
刚体变换

学习 3D数学基础 (矩阵1)相关推荐

  1. [Unity3D学习]3D数学基础之向量

    [Unity3D学习]3D数学基础之向量 2014.05.11 向量是2D.3D数学研究的标准工具,在3D游戏中向量是基础. 一.向量 1.向量的数学定义 向量就是一个数字列表,对于程序员来说一个向量 ...

  2. 3D数学基础——矩阵、欧拉角和四元数的相互转换与比较

    矩阵.欧拉角和四元数的相互转换与比较 相互转换 这里只展示最终的转换结果,推导过程请参考<3D数学基础:图形与游戏开发> 欧拉角转换到矩阵 欧拉角描述了一个旋转序列,分别计算出给每个旋转的 ...

  3. 3D数学基础——矩阵的介绍与使用

    矩阵 矩阵就是一个矩形的数字.符号或表达式数组.矩阵中每一项叫做矩阵的元素(Element).下面是一个2×3矩阵的例子: 矩阵可以通过(i, j)进行索引,i是行,j是列,这就是上面的矩阵叫做2×3 ...

  4. 3d数学基础学习总结

    3d数学基础目录 第1章 简介 1.1 什么是3D数学 1.2 为什么选择本书 1.3 阅读本书需要的基础知识 1.4 概览 第2章 笛卡尔坐标系统 2.1 1D数学 2.2 2D笛卡尔数学 2.3 ...

  5. 3d数学基础:图形和游戏开发(第2版)_游戏引擎编程需要哪些基本数学知识?

    现今,想要从头写一个功能强大的3D引擎,个人的力量恐怕难以胜任,即使能力足够,时间恐怕也不允许.在这个美好的开源时代,你只需具备修改各种引擎的能力便足以满足开发游戏的各项需求.现代游戏引擎的复杂级别已 ...

  6. OpenGL超级宝典学习笔记——操作矩阵

    为了更强大的功能和灵活性,我们有时需要直接操作矩阵.在OpenGL中4x4的矩阵用包含16个浮点数值的一维数组来表示,而不是用二维的4x4的数组来表示.OpenGL之所以这么做,因为使用一维数组更高效 ...

  7. 零基础实践深度学习之数学基础

    零基础实践深度学习之数学基础 深度学习常用数学知识 数学基础知识 高等数学 线性代数 行列式 矩阵 向量 线性方程组 矩阵的特征值和特征向量 二次型 概率论和数理统计 随机事件和概率 随机变量及其概率 ...

  8. 《3D数学基础》实践1 向量类代码分析

    理解数学,理解代码! 大家好,我是老G! 今天为大家带来<3D数学基础>系列视频. 主要讲解:游戏开发中用到的3D数学知识,包括:定义,定理,推论. 也包括他们的推导过程,以及应用举例. ...

  9. 3D Math Primer for Graphics and Game Development -- 图形与游戏开发(3D数学基础) (简介)...

    3D Math Primer for Graphics and Game Development //z 2014-04-28 13:18:20 L.247'38500 BG57IV3@XCL T20 ...

最新文章

  1. 今晚直播 | 来自《简明的 TensorFlow 2》作者,Google开发者专家的分享
  2. Java迭代器(转)(iterator详解以及和for循环的区别)
  3. 色环电感外部磁场泄漏
  4. 前紫光展锐CTO创业造芯:主打边缘AI视觉,融资10亿,9个月流片
  5. git私立的代码库邀请合作者步骤
  6. 每个努力奋斗过的人,被不公正的际遇砸了满头包的时候,都有那么一瞬间的代入感。出生就是hard模式的人,早已经历了太多的劳其筋骨饿其体肤,再多的人为考验只会摧毁人对美好的向往。...
  7. 微软随.NET 4.5发布新REST API框架
  8. protues7 使用笔记
  9. esxi能直通的显卡型号_显卡刷bios教程
  10. Kotlin | Kotlin教程
  11. ESP8266 WIFI模块开发入门1 开发环境搭建
  12. 微型计算机启天m425显卡驱动,联想启天M425安装win7系统详细教程包括BIOS设置方法USB驱动...
  13. 亲戚关系关系算法java程序_亲戚关系计算器 算法实现
  14. css制作三角形、带三角文本框、价格三角框
  15. 《周一清晨的领导课》--司机与乘客 - [读书笔记]
  16. Spring.NET学习笔记18——整合NHibernate(基础篇) Level 300
  17. 人工解决问题和用计算机解决问题的相同点,第2学时:计算机解决问题的过程_20120207110033703.doc...
  18. 微信内网页链接被多人投诉导致拦截的解决方案
  19. 基于Python实现并测试Modularity算法
  20. 尚G谷大前端视频教程

热门文章

  1. windows7中双击视频文件不能用终极解码播放问题的解决
  2. 19号笔刷 ps_【精品】PS绘画19号笔刷的运用方法
  3. Microblaze添加自定义IP核,挂AXI总线实现SSD1306 OELD驱动
  4. MySql数据库事务隔离级别底层实现原理总结
  5. xlsx导入日期变为5位数字,转为正常日期
  6. avue参数个人总结
  7. createjs之Easeljs
  8. 1、CreateJS介绍-EaselJS
  9. 关于使用map,for等遍历数组获取其中每一项的值在调用接口只取到最后一个值的问题
  10. 开源不是免费的午餐,新变化背后的趋势是什么?