计算机图形学重要的数学知识
向量的点乘
作用:
- 计算b在a上的投影或者a在b上的投影。
- 计算a、b两个向量的接近程度,通过夹角余弦的值判定。
向量的叉积
总结:
- 利用右手螺旋定则判断右(左)手坐标系。X向量叉乘Y,使用右手螺旋定则,如果大拇指向上则代表是右手坐标系,否则是左手坐标系。
- 向量的叉乘没有交换律。
- 叉乘的结果与左、右坐标系,没有关系。
- 向量叉乘判断a、b两个向量的左右。a向量叉乘b,使用右手螺旋定则,如果大拇指向上且四指方向从a转向b,则b在a的左边。
- 叉乘判断向量a,b的左右位置:叉乘前先将两个向量的Z设置为0,使两个向量都处于XY平面中。叉乘的结果是一个垂直于XY平面的向量,所以结果应该是一个(0,0,ZValue)的向量。根据叉乘的右手(左手)原则,通过Z的正负判断向量的关系。如果是右手坐标系,ZValue为正,向量b在向量a的左侧;如果是左手坐标系,ZValue为正,向量b在向量a的右侧。
- 叉乘判断点是否在三角形内部。实际上是多次利用叉乘判断向量a,b的左右位置。如下图A-B-C,依次做运算,AB向量叉乘AP,BC向量叉乘BP,CA向量叉乘CP,发现AP,BP,CP,分别在AB,BC,CA的左边,即可以判定,P点在三角形的内部;如果以A-C-B方向,都在其右边,同样可以判定在三角形内部。即不论顺序,P点的三个结果都是同一侧,则P点在三角形的内部。
图像变换
三维空间的齐次坐标
定义
如果是(x,y,z,1),则知道它是个点,变成(x,y,z);
如果是(x,y,z,0),则知道它是个向量,仍然变成(x,y,z)
引用的原因
“齐次坐标表示是计算机图形学的重要手段之一,它既能够用来明确区分向量和点,同时也更易用于进行仿射(线性)几何变换。”—— F.S. Hill, JR。为了将所有的三维变换都统一为矩阵运算(主要统一平移变换(线性))。齐次坐标有诸多好的特点:
使用齐次坐标后将线性变换转为矩阵运算:
齐次点具有下列几个性质:
- 如果实数a非零,则(x, y, x, w)和(ax, ay, az, aw)表示同一个点,类似于x/y = (ax)/( ay)。
- 三维空间点(x, y, z)的齐次点坐标为(x, y, z, 1.0),二维平面点(x,y)的齐次坐标为(x, y, 0.0, 1.0)。
- 当w不为零时,齐次点坐标(x, y, z, w)即三维空间点坐标(x/w, y/w, z/w);当w为零时,齐次点(x, y, z, 0.0)表示此点位于某方向的无穷远处。
二维空间变换
转换的顺序很重要
相同的图形转换,顺序不同,转换的结果也不同!
三维空间变换
注意:
- 沿着那个轴旋转,那个轴的分量就不变。
- 绕着Y轴旋转比较特殊,循环对称性质,x叉乘y=z,y叉乘z=x,而z叉乘x=y,顺序反了,所以是旋转负角度。
任意旋转
任意一个3D的旋转都可以表示成绕x轴、y轴、z轴旋转的组合,如下所示。
其中,α β γ 分别代表物体绕x、y、z旋转的角度,它们也被称为欧拉角。
把任意的旋转表示成矩阵:
Rodtigues旋转公式