热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

[置顶]Matrix矩阵计算

(Owedby:春夜喜雨http:blog.csdn.netchunyexiyu转载请标明来源)参考:计算机图形学矩阵计算是图形学上的一个基础处理a)向量的Matrix矩阵变换三维M
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源)

a) 向量的Matrix矩阵变换


三维Matrix通常是四行四列的entry[4][4]: 实际使用的是三行四列,最后行为补充行
[A00,A01, A02, A03]
[A10,A11, A12, A13]
[A20,A21, A22, A23]
[0,  0, 0, 1 ]

向量相当于
[X]
[Y]
[Z]
[1]

一个三维向量计算的时候:
Matrix3d * vec3dOrg  = Vec3dNew
Vec3dNew.x = vec3dOrg.x * matrix3d.entry[0][0] + vec3dOrg.y * matrix3d.entry[0][1] + vec3dOrg.z * matrix3d.entry[0][2] + matrix3d.entry[0][3];
Vec3dNew.y = vec3dOrg.x * matrix3d.entry[1][0] + vec3dOrg.y * matrix3d.entry[1][1] + vec3dOrg.z * matrix3d.entry[1][2] + matrix3d.entry[1][3];
Vec3dNew.z = vec3dOrg.x * matrix3d.entry[2][0] + vec3dOrg.y * matrix3d.entry[2][1] + vec3dOrg.z * matrix3d.entry[2][2] + matrix3d.entry[2][3];

 

b) Matrix矩阵乘法


注意: 后做的偏移放前面
例如先偏移M1,再旋转M2,复合矩阵 = M2 * M1

矩阵相乘的时候,效果如下,结果为
Cij = 求和(k=1..n) AikBkj

[A11,A12, A13, A14]
[A21,A22, A23, A24]
[A31,A32, A33, A34]
[0,  0, 0, 1 ]
*
[B11,B12, B13, B14]
[B21,B22, B23, B24]
[B31,B32, B33, B34]
[0,  0, 0, 1 ]

结果为
Cij = 求和(k=1..n) AikBkj

---前两列                                                             
A11 * B11 + A12 * B21 + A13 * B31,  A11 * B12 + A12 * B22 + A13 * B32,
A21 * B11 + A22 * B21 + A23 * B31,  A21 * B12 + A22 * B22 + A23 * B32,
A31 * B11 + A32 * B21 + A33 * B31,  A31 * B12 + A32 * B22 + A33 * B32,
0, 0                                                                  
---后两列                                                             
A11 * B13 + A12 * B23 + A13 * B33,  A11 * B14 + A12 * B24 + A13 * B34 
A21 * B13 + A22 * B23 + A23 * B33,  A21 * B14 + A22 * B24 + A23 * B34,
A31 * B13 + A32 * B23 + A33 * B33,  A31 * B14 + A32 * B24 + A33 * B34,
0, 1

例如: 放大矩阵 与 位移矩阵相乘 相当于先位移再放大(先做的偏移放后面乘)
[2,0,0,0] // 以0,0,0为基点放大两倍
[0,2,0,0]
[0,0,2,0]
[0,0,0,1]

[1,0,0,-6] // x.y各位移6
[0,1,0,-6]
[0,0,1,0]
[0,0,0,1]

结果为:
[2,0,0,-12] 
[0,2,0,-12]
[0,0,2,0]
[0,0,0,1]
如果乘以向量(0,0,0)得到的结果是(12,12,0),相当于(0,0,0)点位移(6,6,0),并整体坐标放大两位

 

c) Matrix求逆矩阵

 

求逆矩阵的话,就必须要知道秩det的概念
1.矩阵的秩
Det为组合矩阵单元生成的一个数

二维情况
[A11 A12]
[A21, A22]
detA = A11 * A22 – A12 * A21

N维情况
[A11,A12, A13]
[A21,A22, A23]
[A31,A32, A33]

通过行求
detA = 求合(j=1..n)   (-1)^(j+k)  Ajk det[A]jk 
例如: 三阶时detA = A11 * (A22 * A33 – A23 * A32) - A12 * (A21 * A33 – A23 * A31) + A13 * (A21 * A33 – A23 * A31)

通过列求
detA = 求合(k=1..n)   (-1)^(j+k)  Ajk det[A]jk 
例如: 三阶时detA = A11 * (A22 * A33 – A23 * A32) – A21 * (A12 * A33 – A13 * A32) + A31 * (A12 * A23 – A13 * A22)

注: det[A]jk 为去掉 j行 k列后形成的 n-1阶矩阵的秩


2. 求逆矩阵-通过秩
Mjk = (-1)^(j+k) * det[A]kj / detA

注: det[A]kj 为去掉k行j列后形成的秩
   detA为矩阵A的秩
注: detA不能为0,否则矩阵没有逆矩阵


3. 求逆矩阵-通过自然变换
通过例如
第1行 = 第1行 + 第三行 * 2
第1列 = 第1列 – 第二列
第2列 = 第2列 / 2;
类似方向,
1. 把A矩阵通过多次变换  单位矩阵
2. 同理,把单位矩阵经历相同的变换,单位矩阵就会成为A的逆矩阵 (A)^-1

原理就是
A * A^(-1) = 单位矩阵
A * P1 * P2 * P3 ..* Pn = 单位矩阵

A^(-1) = P1 * P2 * P3 ..*Pn = 单位矩阵 * P1 * P2 * P3 ..*Pn

 

 

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源)


推荐阅读
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文详细介绍了如何在BackTrack 5中配置和启动SSH服务,确保其正常运行,并通过Windows系统成功连接。涵盖了必要的密钥生成步骤及常见问题解决方法。 ... [详细]
  • 探讨如何高效使用FastJSON进行JSON数据解析,特别是从复杂嵌套结构中提取特定字段值的方法。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 在macOS环境下使用Electron Builder进行应用打包时遇到签名验证失败的问题,具体表现为签名后spctl命令检测到应用程序未通过公证(Notarization)。本文将详细探讨该问题的原因及解决方案。 ... [详细]
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本题探讨了一种字符串变换方法,旨在判断两个给定的字符串是否可以通过特定的字母替换和位置交换操作相互转换。核心在于找到这些变换中的不变量,从而确定转换的可能性。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
author-avatar
邱氏家族_玉辈
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有