计算机图形学中的数学知识
2017-08-19 14:26
330 查看
图形学很大程度上就是直接把数学表达式转换成代码。数学表达越清晰,对应的代码就越容易理解。
一、集合与映射
映射,又称为函数,是数学及编程的基础。和程序中的函数类似,数学中的映射把属于某类型的自变量作为参数,映射为(返回)某特殊类型的对象。 经常用到的集合包括: 1、R:实数集合 2、R+:非负实数集合(包括0) 3、R²:二维平面上的实数有序对集合 4、Rn:n维笛卡尔空间中的点集合 5、Z:整数集合 6、S²:单位球面上的三维点集合(R³中的点) 用箭头和冒号表示集合则如下所示: f:R→Z 上式表达:存在一个函数f,可以将输入的实数映射成一个整数。而编程人员更喜欢这样的等价描述:存在一个函数f,它具有一个实数类型参数,并返回一个整数。即: integer f(real) <⇒ f:R→Z
二、解二次方程
二次方程具有以下形式: Ax2+Bx+C = 0 其中x是一个未知数,通过配方可以解得: x=(-B±sqrt(B²-4*AC))/2*A 决定实数解个数的因子是: D==B²-4*AC 如果D>0,则有两个实数解,D=0则有一个实数解,D<0没有实数解
三、三角学
图形学中的很多情况要用到基本的三角知识,三角知识可以帮我们记忆基本定义。 1、角 以一点出发的两条射线形成一个角。角度定义为这两条射线 在单位圆周上截出的圆弧长度。一般规定用较短的弧长来表示角度,符号由两条射线的顺序来确定,这时所有弧度值都位于[-π,π]. ![这里写图片描述](http://img.blog.csdn.net/20170809233944356?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdHRhbjEyMTUyMjU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 每个角度都是两条射线在单位圆周上切出的圆弧的长度。 2、三角函数 已知一个直角三角形,根据毕达哥拉斯定理有以下等式: a²+b²=c² 定义角α的正弦、余弦以及其他三角函数如下 sinα = b/c cscα = c/b cosα = a/c secα = c/a tanα = b/a cotα = a/b 注意:在计算机图形学中经常约定逆时针旋转为正方向。 三角函数是周期函数,多个自变量值对应同一个函数值,这 就意味着这些函数在实数域R内是不可逆的。为了使三角函数可逆,必须对取值范围进行限制。定义域和值域规定为: asin:[-1,1]→[-π/2,π/2] acos:[-1,1]→[0,π] atan:R→[-π/2,π/2] atan2:R→[-π,π] 最后一个函数atan2(s,c)是非常有用的。其中s与sinA成正比,c与cosA成正比,且比例因子相同,atan2(s,c)的函数值为A。假使该比例因子为整数,其中的一种理解方式为,函数返回极坐标下二维笛卡尔点(s,c)的角度。 3、三角函数公式 在此列出各种有用的三角函数公式。 诱导公式: sin(-A) = -sinA cos(-A) = cosA tan(-A) = -tanA sin(π/2-A) = cosA cos(π/2-A) = sinA tan(π/2-A) = cotA 毕达哥拉斯公式: sin²A + cos²A = 1 sec²A - tan²A = 1 csc²A - cot²A = 1 和差公式: sin(A+B) = sinAcosB + cosAsinB sin(A-B) = sinAcosB - cosAsinB sin(2A) = 2sinAcosA cos(A+B) = cosAcosB - sinAsinB cos(A-B) = cosAcosB + sinAsinB cos(2A) = cos²A - sin²A tan(A+B) = (tanA+tanB)/(1-tanAtanB) tan(A-B) = (tanA-tanB)/(1+tanAtanB) tan(2A) = (2tanA)/(1-tan²A) 半角公式: sin²(A/2) = (1-cosA)/2 cos²(A/2) = (1+cosA)/2 积化和差公式: sinAsinB = -(cos(A+B)-cos(A-B))/2 sinAcosB = (sin(A+B)+sin(A-B))/2 cosAcosB = (cos(A+B)+cos(A-B))/2 对于变长为a,b,c 对应角分别为A,B,C的任意三角形,下列公式都成立: sinA/a = sinB/b = sinC/c(正弦定理) c² = a²+b²-2abcosC(余弦定理) (a+b)/(a-b) = tan((A+B)/2)/tan((A-b)/2)(正切定理) 三角形的面积同样可以通过三条边长表示出来: s = sqrt((a+b+c)(-a+b+c)(a-b+c)(a+b-c))/2
四、向量
向量包含长度和方向,可以用一个箭头表示。若两个向量方向和长度相同,则两个向量相等。 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
五、二维隐式曲线
直观上,一条曲线就是可以在纸上一笔画出的点的集合。表示曲线的一般方法是使用隐式方程。隐式方程具有如下形式: f(x,y) = 0 1.二维梯度 如果我们把函数f(x,y)看成高度f(x,y)的高度图,那么梯度向量就指向坡度最大的方向。梯度向量▽f(x,y)由下式给出: ▽f(x,y) = (∂f/∂x,∂f/∂y) 隐式曲线f(x,y)=0上,某点处的梯度向量与曲线在该点处的切向量正交。该梯度向量一般称为曲线的法向量。此外,因为梯度指向上坡的方向,它就指明了f(x,y)>0的区域的方向。 2.隐式二维直线 我们熟悉的直线"斜切式"为: y = mx+b 可以很容易地把它转换为隐含式: y-mx-b = 0 这里m是斜率,b是直线穿过y轴时的y值,通常称为y截距。 在不改变方程零点的情况下,可以对隐式方程两边同时乘以一个常量。对于任意非零k,kf(x,y)=0与f(x,y)=0是同一条相同的曲线。 3.隐式二次曲线 对于二维二次曲线,也就是椭圆和抛物线,以及特殊的双曲线、圆和直线,都可以用一个通用的隐形式来表示: Ax²+Bxy+Cy²+Dx+Ey+F = 0 对于圆心为(xc,yc)、半径为r的圆来说,上式变为: (x-xc)²+(y-yc)-r² = 0 如下是抛物线方程: y-k(x-xc)² = 0 其中k是一个非零常数,xc是抛物线的对称轴。对称轴与坐标轴平行的椭圆方程为: (x-xc)²/a²+(y-yc)²/b² = 0 其中(xc,yc)是椭圆的中心,a和b分别是椭圆的长、短半轴的长度。 六、二维参数曲线 参数曲线通过一个参数进行控制,该参数可以看做沿曲线连续运动的指针。这样的曲线具有以下形式: (x,y) = (g(t), h(t)) 其中(x,y)是曲线上的一点,t就是影响曲线的参数。 1.二维参数直线 在二维空间中,通过两点p0=(x0,y0)和p1(x1,y1)的直线参数方程课表示为: (x,y)=(x0+t(x1-x0), y0+t(y1-y0)) 因为公式中的x和y具有类似的结构,我们可以采用向量形式p=(x,y)表示: p(t) = p0+(p1-p0)t 2.二维参数圆 对于圆心为(xc,yc)、半径为r的圆,其参数形式为: (x,y) = ((xc+r*cosα),(yc+r*sinα)) 为了保证曲线上的每点只对应唯一的参数α,可以将α的范围限制在[0,2π)、(-π,π]或者其他长度为2π的半开区间内。 调整x,y表达式中的系数,就可以写出对称轴与坐标轴平行的椭圆参数方程: (x,y) = ((xc+a*cosα),(yc+b*sinα))
七、三维隐式曲面
隐式方程隐式的确定了曲面上点的集合: f(x,y,z) = 0 曲面上的任意一点(x,y,z)将使f的值为零,不在曲面上的点将返回非零值。 1.隐式曲面的法向量 在光学计算中会用到曲面的法向量,也就是垂直于曲面的向量。曲面上的每个点都对应独自的法向量。交叉点p处的曲面法向量由隐式函数的梯度给出: n=▽f(p)=(∂f(p)/∂x, ∂f(p)/∂y, ∂f(p)/∂z) 梯度向量可以指向曲面内侧,也可以指向曲面外侧。如果某个f的梯度指向曲面的内侧,而我们希望梯度指向曲面的外侧,那么就采用-f(p)=0的形式。曲面f(p)=0与-f(p)=0相同,只是二者的梯度方向相反,也就是 ▽f(p)=-▽(-f(p)) 2.隐式平面 作为一个例子,考虑过点a、法向量为n的无线平面。该平面的隐式方程表示为: (p-a)*n = 0 其中a和n都是已知的量。点p是满足方程的点。该方程的几何意义是:从a到p的向量与平面的法向量垂直。如果p不在平面内,那么(p-a)就不与n成直角。 有时需要建立过三点a、b、c的平面方程。可以通过求平面上任意量向量的叉乘来求平面的法向量: n=(b-a)x(c-a) 那么平面的隐式方程可写为: (p-a)*((b-a)x(c-a)) = 0 该方程的几何意义是:由p-a、b-a、c-a定义的平行六面体的体积为零,也就是说这三个向量共面。
八、三维参数曲线
三维参数曲线的表示形式与二维参数曲线类似: 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)
十、线性插值
图形学中最长运用到的数学运算可能就是线性插值了。由两点a、b构成的以参数t为参数的直线形式为p=(1-t)a+tb,这就是插值,因为当t=0和t=1时,p正好通过a和b。
十一、三角形
无论是二维情况还是三维情况,三角形都是图形学程序中的基本图形。一般像颜色这样的信息标记在三角形的顶点上,并被插值到三角形中。实现这种插值的坐标系称为重心坐标系。 1.二维三角形 在图形学中,经常希望为三角形的每个顶点赋以性质,如颜色,并将该性质的值插值到三角形中。实现这种要求有多重方法,其中最简单的方法就是利用重心坐标系。以坐标a为原点,从a到b和从的向量为基向量。于是点p就可以表示为: p = a + β*(b-a) + γ*(c-a) 整理上式得到: p = (1-β-γ)*a + β*b + γ*c 经常定义一个新的变量α,以改善方程的对称性: p(α,β,γ) = α*a + β*b + γ*c 其中α+β+γ = 1 重心坐标系由平面上的所有点确定。重心坐标系的一大特点是,对于由a、b、c构成的三角形,当且仅当下列条件满足时,点p位于三角形内部: 0<α<1 0<β<1 0<γ<1 如果其中一个坐标为零,而其他两个坐标位于0和1之间,那么改点位于三角形边上。如果有两个坐标为0,则剩下的一个为1,则该点位于顶点。 2.三维三角形 三角形的重心坐标可以扩展到三维空间。假设a、b、c是三维点,我们仍然可以使用下式: p=(1-β-γ)*a+β*b+γ*c 现在,通过改变β和γ,形成一个平面。 计算三角形所在平面的任意两个向量的叉乘,就可以得到三角形的法向量。用三角形的两边构造这样的向量最方便,例如: n=(b-a)*(c-a)
相关文章推荐
- ZZ 计算机图形学需要多少数学知识
- 计算机图形学 所需要的数学知识--<<计算机图形学(第三版)>>读书笔记
- 计算机图形学的数学基础
- 1. 目标(3D数学基础-计算机图形学背后的原理)
- 计算机图形学的数学基础
- 机器学习和计算机视觉相关的数学知识
- [转]机器学习和计算机视觉相关的数学知识
- 计算机图形学基础知识-三维变换.
- 计算机图形学中的数学概念
- [转]一位MIT计算机博士对数学知识的思考
- 计算机图形学相关知识
- 数学在计算机图形学中的应用
- 计算机图形学基础知识-三维变换
- 计算机图形学使用的数学
- 机器学习和计算机视觉相关的数学知识
- [转]数学在计算机图形学中的应用
- 数学在计算机图形学中的应用
- 图形学的一些数学知识备忘
- 数学在计算机图形学中的应用
- 数学之美---计算机图形学算法(转贴)