日期:2023年5月28日标签:ComputerGraphics

坐标系、点和向量的矩阵表示 #

本文以三维笛卡尔坐标系为例,讲述如何用矩阵表示坐标系、点以及向量。为了方便描述用 p(a,b,c) 表示点,用 v(a,b,c) 表示向量。

前提 #

假设现有如下坐标系,原点坐标为 p(0,0,0),x 轴的方向为 v(1,0,0),y 轴方向为 v(0,1,0),z 轴方向为 v(0,0,1),这三个方向向量是坐标系的三个基向量 ijk

在图形学中会大量用到矩阵的运算,所以无论是点、向量以及坐标系我们都需要用矩阵去表示它们。

向量和点的矩阵表示 #

(1)向量的矩阵表示 #

线性空间中,向量集中任意一个向量可以通过基向量描述。例如向量 v1 v(a, b, c)

v1 = a * i + b * j + c * k; // i, j, k 为 x,y,z 轴方向的基向量
// 加上一个零向量
v1 = a * i + b * j + c * k + 0 * o; // o 表示零向量

用矩阵表示上述公式:

矩阵乘法描述向量

上述等式的左边即为向量的矩阵表示:向量表示为前面 n 个元素为坐标系的系数,最后一个元素为 0 的行矩阵(也可以表示为列矩阵)

(2)点的矩阵表示 #

点可以表示为一个点向某个方向移动,例如这个方向为 d。例如点 p1 p(a, b, c) 表示为:

p1 = 1 * o + a * d.x + b * d.y + c * d.z; // o 表示坐标系原点,d 表示移动向量

用矩阵表示上述公式:

矩阵乘法描述点

上述等式的左边即为点的矩阵表示:点表示为前面 n 个元素为坐标系的系数,最后一个元素为 1 的行矩阵(也可以表示为列矩阵)

这种表示方式完全满足向量和点的运算,

// 点和向量的加法,向量 (1,1,1) 与点 (1,1,1),结果最后一位为 1 表示点
(1, 1, 1, 1) + (1, 1, 1, 0) = (2, 2, 2, 1)
// 向量和向量的加法,结果最后一位为 0 表示向量
(1, 1, 1, 0) + (1, 1, 1, 0) = (2, 2, 2, 0)
...

是不是超级舒服?

坐标系的矩阵表示 #

可以用一组基向量,和一个原点描述一个坐标系。已经讲述了如何用矩阵表示向量和点了,我们可以直接代入,将前三行表示为基向量,第四行表示原点:

矩阵描述坐标系

(完)

目录