向量包含长度和方向,可以用一个箭头表示。若两个向量方向和长度相同,则两个向量相等。
1.向量运算
向量的加法遵守平行四边形法则。求和时,把一个向量的箭头尾部与另一个向量的箭头相连,和向量与参与运算的两个向量构成一个完整的三角形。向量加法满足交换律:
**a+b = b+a**
向量减法
**b-a ≡ -a+b**
2.向量的笛卡尔坐标
任意一个二维向量可以有两个互不平行的非零向量组合而成。这两个向量所具有的这种性质成为线性独立。线性独立的两个向量就构成了一个二维基,这两个向量称为基向量
3.向量点积
两个向量相乘的最简单方式是点积。向量a和b的点积用a*b表示,通常称之为标量积。向量的点积跟与两个向量的长度和它们之间的夹角有关:
a*b = |a|*|b|cosα
在图形程序中,一般通过点积计算两个向量间夹角的余弦值。
也可以通过点积求一个向量到另一个向量的投影,投影长度a→b为:
a→b=|a|cosα=(a*b)/|b|
如果二维向量a和b以笛卡尔坐标形式表示,则可以利用x*x=y*y=1 以及 x*y = 0推断出:
a*b = x1*x2 + y1*y2
4.向量叉乘
叉乘axb常用于三维向量。叉乘axb返回一个三维向量,该向量与另外两个向量a和b都是正交的。叉乘得到的结果向量,其长度与sinα相关:
|axb|=|a||b|sinα
|axb|等于两向量a和b形成的平行四边形的面积。
叉乘向量的方向只有两种可能,定义x、y、z轴上的方向向量为:
x = (1,0,0)
y = (0,1,0)
z = (0,0,1)
以上三个单位向量的所有叉乘如下:
x x y = +z
y x x = -z
y x z = +x
z x y = -x
z x x = +y
x x z = -y
根据sinα的性质,我们知道一个向量与它本身的叉乘结果为零向量,即:x x x = 0.注意叉乘不满足交换律。
5.标准正交基与坐标系
建立坐标系是几乎任何图形学程序的核心任务之一。这一任务的关键就是计算标准正交基。对于任意两个向量u和v,只要它们是正交的,并且它们的长度为单位长度,那么它们就构成了一对标准正交基,于是有:
|u| = |v| = 1; u * v = 0
在三维空间中,三个向量u、v和w如果满足一下条件,它们就构成一组标准正交基:
|u| = |v| = |w|; u*v = v*w = w*u = 0
如果w=uxv,那么这个标准正交基满足右手法则,否则就满足左手法则。
5.从单向量建立正交基
经常需要从单个向量构造一组标准正交基,也就是说,已知一个向量a,需要找出一组标准正交向量u、v、w,使得w的指向和向量a的方向相同。具体求解过程如下:
w = a/|a|
为了求u和v,需要找到一个与w不共线的向量t。为此,只要让t等于w,再将其中绝对值最小的元素变为1即可。例如,如果w=(1/ sqrt(2), 1/sqrt(2), 0),则t=(1/ sqrt(2), 1/sqrt(2), 1)。于是u和v很容易求出:
u=(t x w)/|t x w|
v = w x u
三维参数曲线的表示形式与二维参数曲线类似:
x = f(t)
y = g(t)
z = h(t)
例如,绕z轴的螺旋线方程是:
x = cost
y = sint
z = t
三维参数直线
三维直线参数的向量表示形式为:
p = o + td
其中,o和d是向量。
九、三维曲面参数
另一种方法是通过二维参数确定三维曲面,具有以下形式:
x = f(u,v)
y = g(u, v)
z = h(u, v)
参数球面
地球表面上的一点由精度和纬度确定。如果把极坐标系置于半径为r的球体上,球心在原点,就得到球面的参数方程:
x = r*cosα*sinγ
y = r*sinα*sinγ
z = r*conγ
已知某组(x,y,z),我们还想求出对应的(α,γ)。假设α∈(-π,π],利用atan2函数很容易求出
γ = acos(z/sqrt(x²+y²+z²))
α = atan2(y,x)