利用矩阵进行坐标转换 之前做拓扑图,本来打算整一套坐标系统在里面的,后来因为时间原因暂时用了最原始的方法实现
现在稍稍得闲,重新开始思考这个问题
不过在搜索的时候,意外发现
Net Framework 类库中自带的有实现坐标系转换功能的类
Reflector 了一把,发现代码看不懂了——都是利用矩阵操作的
矩阵这玩意儿,几年没用早忘完了
于是认真学习了一把,顺便把如何用矩阵进行坐标转换的过程记录和注解一下
文中部分内容摘取自 MSDN,搜索“变换的矩阵表示形式”即可找到
首先 review 一下矩阵的基础知识: m×n 矩阵是排列在 m 行和 n 列中的一系列数
下图显示几个矩阵
可以通过将单个元素相加来加合两个尺寸相同的矩阵
下图显示了两个矩阵相加的示例
m×n 矩阵可与一个 n×p 矩阵相乘,结果为一个 m×p 矩阵
第一个矩阵的列数必须与第二个矩阵的行数相同
例如,一个 4×2 矩阵与一个 2×3 矩阵相乘,产生一个 4×3 矩阵
矩阵的行列的平面点可视为矢量
例如,(2, 5) 是具有两个组件的矢量,(3, 7, 1) 是具有三个组件的矢量
两个矢量的点积定义如下: (a, b)
(c, d) = ac + bd (a, b, c)
(d, e, f) = ad + be + cf 例如,(2, 3) 和 (5, 4) 的点积是 (2)(5) + (3)(4) = 22
(2, 5, 1) 和 (4, 3, 1) 的点积是 (2)(4) + (5)(3) + (1)(1) = 24
请注意,两个矢量的点积是数字,而不是另一个矢量
另外请注意,只有当两个矢量的组件数相同时,才能计算点积
将 A(i, j) 作为矩阵 A 中第 i 行、第 j 列的项
例如,A(3, 2)是矩阵 A 中第 3 行、第 2 列的项
假定 A、B 和 C 是矩阵,且 AB