Lesson 4 二维三维图形变换
1. 窗口与视图的变换
用户域(用户空间): 用户用来定义设计对象的实数域(连续的无限的)
窗口区W: 在用户坐标系中需要进行观察和处理的一个坐标区域,即用户在用户域中指定的任意区域W(window)。
窗口是用户图形的一部分,小于或等于用户域,可以嵌套定义窗口。
屏幕域: 图形设备上用来输出图形的最大区域。(有限的整数域)
视图区V: 将窗口映射到显示设备上的坐标区域。任何小于或等于屏幕域的区域都可定义为视图区V(viewport)。一个屏幕上可定义多个视图区。
窗口区到视图区的观察变换
为了全部如实地在视图区中显示出窗口区内所定义的物体图形,就必须求出图形在窗口区和视图区之间的映象关系。即需要根据用户所定义的参数(窗口区),找到窗口区与视图区之间的坐标对应关系。



a,c分别反映了窗口区和视图区之间在x和y方向上的伸缩比
b,d分别反映了定位点在x和y方向上的偏移量。
2.二维图形的几何变换
图形变换就是要变换图形的顶点坐标,同时保持图形的原拓扑关系不变。
(矩阵加法适合交换律和结合律;矩阵乘法适合结合律,不适合交换律)
性质:
从属性:变换前直线或图形上的点,变换后直线或图形上均有一确定的点与之对应。
同素性:变换前是直线、曲线或点,变换后仍有直线、曲线或点与之对应。
平行性:两直线平行,变换后仍保持平行。
平移变换
平移变换定义:
平移变换是指将p点沿直线路径从一个坐标位置移到另一个坐标位置的重定位过程,是一种不产生变形而移动物体的刚体变换。

设把图形从屏幕上一处p(x,y)移到另一处p’(x’,y’),平移的水平距离为Tx,垂直距离为Ty。可得 : x’= x+Tx 和 y’= y+Ty (Tx、Ty称为平移矢量)
[x’ y’] = [x y] + [Tx Ty]
设T = [Tx Ty],则p’ = p + T
比例变换
比例变换定义:
比例变换是指对p点相对于坐标原点沿x方向放缩Sx倍, 沿y方向放缩Sy倍。可得: x’= xSx 和 y’= ySy (Sx、Sy称为比例系数)

若把p(x,y)相对于参考点(x0,y0)缩放到另一处p’(x’,y’) ,sx、 sy为水平、垂直比例因子。可得: x’= x0+(x-x0)Sx 和 y’= y0+(y-y0)Sy
旋转变换
旋转变换定义: 二维旋转是指将p点绕坐标原点转动某个角度(逆时针为正,顺时针为负)得到新的点p’的重定位过程。
原坐标: x = r · cosα 和 y = r · sinα
相对原点变换后:x’ = xcosθ - ysinθ 和 y’ = xsinθ + ycosθ

相对参考点变换后:x’ = x0 + (x - x0) cosθ - (y - y0)sinθ 和 y’ = y0 + (y - y0) cosθ + (x - x0)sinθ
齐次坐标技术
使图形变换转化为表示图形的点集矩阵与某一变换矩阵进行矩阵乘法这一单一问题,从而借助计算机快速得到变换后的图形
**实现方法:**用n+1维向量表示一个n维向量,且在n+1维空间中描述n维向量的变换
例如:二维坐标点p(x,y)的齐次坐标为p(wx,wy,w)。w是一个非零比例系数。习惯上,用p=[x y 1]表示齐次坐标下二维平面上一个未变换的点。
齐次坐标表示法把二维线形变换表示如下所示的规格化形式:
x’ = a1x + b1y + c1 和 y’ = a2x + b2y + c2

n个定点的多边形,顶点矩阵变换为:

用齐次坐标技术表示几种变换:
平移 比例 旋转 :

镜像对称变换:

错切变换:
沿x轴方向关于y错切(x = x + cy)
沿y轴方向关于x错切(y = y + bx)
复合变换:
图形作一次以上的几何变换时,可以将复杂变换转化成一系列简单变换的连乘积,即变换矩阵相乘。
矩阵乘法没有交换率,复合变换要按一定顺序进行
连续变换:
连续进行的平移、比例、旋转变换可以交换顺序
连续进行的沿相同方向的错切可以交换顺序
eg:求XOY平面内,p(x,y)点绕任意点A(x0,y0)逆时针旋转θ角的复合变换矩阵。
① 将任意点A移至坐标原点,此时进行平移变换。
② 针对原点进行二维几何变换—逆时针旋转θ角。
③ 进行反平移,将任意点A又移回到原来的位置。

整体的比例变换(s,全比例变换):
它使整个图形沿x、y轴作等比例均匀变换
若s>1,图形整体缩小;
若0<s<1,图形整体放大;
若s<0,发生关于原点的对称变换。

无穷远点:
[1 0 0]:x轴上的无穷远点;
[0 1 0]:y轴上的无穷远点;
[0 0 1]:坐标原点。
3.三维图形的几何变换
通过三维图形变换,可用二维屏幕坐标表示三维形体。
三维图形变换则分为三维几何变换和投影变换
三维图形的几何变换
三维基本几何变换都是相对于坐标原点和坐标轴进行的几何变换,有平移、比例、旋转、对称和错切等。假设三维物体变换前一点为p(x,y,z),变换后为p’(x’,y’,z’)。
三维空间中某点的变换可以表示成点的齐次坐标与四阶的三维变换矩阵相乘:


根据T3D在变换中所起的具体作用,进一步可将T3D分成四个矩阵。即:


平移变换

比例变换
比例变换分局部比例变换和整体比例变换。
① 局部比例变换
局部比例变换由T3D中主对角线元素决定,其它元素均为零。
当对x,y,z方向分别进行比例变换时,其变换矩阵为:
其中,a、e、i分别为x,y,z三个方向的比例因子。若a=e=i,则各方向缩放比例因子相同;若a≠e≠i,则各方向缩放比例因子不同,立体产生变形。
② 整体比例变换
若用同一比例进行变换,即得到整体比例变换,可用以下矩阵表示:

旋转变换
三维旋转变换可以看成是二维旋转变换的组合:分别以x, y,z为旋转轴,绕每个旋转轴的三维旋转可以看成是在另两个坐标轴组成的二维平面上进行的二维旋转变换,将二维旋转变换组合起来,就可得到总的三维变换。
① 绕z轴旋转
z坐标不变,x,y坐标变化,正好同二维的正向旋转一样
三维点p绕z轴正向旋转θ角的变换矩阵为:
② 绕y轴旋转
y坐标不变,z,x坐标变化,三维点p绕y轴正向旋转θ角的变换矩阵为:
③ 绕x轴旋转
x坐标不变,y,z坐标变化,三维点p绕x轴正向旋转θ角的变换矩阵为:

对称变换
对称变换有关于坐标平面、坐标轴、原点等对称变换。
① 关于坐标平面对称
另两种变换以此类推。
② 关于坐标轴对称
另两种变换以此类推。
③ 关于原点对称

错切变换
三维物体沿x、y、z轴三个方向发生错切变换,其变换矩阵为:

另两个以此类推。
逆变换


三维复合变换
三维复合变换是指图形作一次以上的变换,变换结果是每次的变换矩阵相乘:p’ = p · T = p · T1 · T2 ……Tn (n>1)
相对于参考点F(xf,yf,zf)的三维变换,步骤为:
① 将参考点F移至坐标原点;
② 针对原点进行三维几何变换;
③ 进行反平移
将物体绕平行于某坐标轴的轴旋转,可通过下列变换序列来得到所需旋转矩阵:
① 平移:使物体的旋转轴和与之平行的某一坐标轴重合;
② 旋转:对该坐标轴完成指定的旋转;
③ 逆平移:将物体的旋转轴移回原位置。
旋转轴平行于z轴的几何变换。
旋转轴平行于y轴的几何变换。
旋转轴平行于x轴的几何变换。

Lesson 5 三维图形投影和消隐
1.三维图形投影变换
基础知识
投影变换:
把三维物体投射到投影面上得到二维平面图形。分为平面几何投影和观察投影。
- 平面几何投影主要指平行投影、透视投影以及通过这些投影变换而得到的三维立体的常用平面图形:三视图、轴测图。
- 观察投影是指在观察空间下进行的图形投影变换。
- 首先在三维空间中选择一个点为投影中心;
- 不经过这个点再定义一个平面为投影平面;
- 连接投影中心与三维物体(线段AB)的线,称为投影线。
- 投影线与投影面相交,在投影面上形成物体的像(线段A’B’),这个像称为三维物体在二维投影面上的投影。

平面几何投影可分为两大类:
透视投影:
投影中心到投影面之间的距离是有限的,有一个投影面和一个投影中心
生成真实感视图但不保持相关比例。
平行投影:
投影中心到投影面之间的距离是无限的,有一个投影面和投影方向。
精确地反映物体的实际尺寸,不具有透视缩小性。没有给出三维物体外表的真实性表示。
平行投影可分成两类:正投影和斜投影
当投影方向与投影平面的夹角为90度时,得到的投影为正投影,否则为斜投影

正投影又可分为:三视图和正轴测。
当投影面与某一坐标轴垂直(或投影线与某一坐标轴平行)得到的投影为三视图;否则,得到的投影为正轴测投影。
三视图:
只有物体一个面的投影,可以测量距离和角度。
三视图包括主视图、侧视图和俯视图三种,投影面分别与Y 轴、X轴和Z轴垂直。
正轴测投影:
投影平面不与坐标轴垂直,所以同时可看到一个物体的多个面,具有一定的立体效果。它保持形体间的平行性,但角度有变化。
当投影面与三个坐标轴之间的夹角都相等时为正等轴测;
当投影面与两个坐标轴之间的夹角相等时为正二测;
当投影面与三个坐标轴之间的夹角都不相等时为正三测。
三视图
为了将三个视图画在一张图上,需将三个视图都重合到一个平面XOZ上去。

**主视图:**将三维形体向XOZ面(V面)作垂直投影(即正平行投影),得到主视图
侧视图:
将三维形体往YOZ面(W面)作垂直投影得到侧视图。
侧视图的投影变换
- 使W面绕Z轴正向旋转90°
- 使W面沿X轴负向平移一段距离x0

俯视图:
将三维形体向XOY面(H面)作垂直投影得到俯视图。
俯视图的投影变换
- 使H面绕X轴负向旋转90°
- 使H面沿Z轴负向平移一段距离z0

[ x’ y’ z’ 1 ] = [ x y z 1 ] ·TV = [ x 0 z 1 ]
[ x’ y’ z’ 1 ] = [ x y z 1 ] ·TW = [-y 0 z 1 ]
[ x’ y’ z’ 1 ] = [ x y z 1 ] ·TH = [ x 0 -y 1 ]
正轴测投影
① 先绕Z轴正向旋转α角
② 再绕X轴反向旋转β角
③ 将三维形体向XOZ平面(V面)作正投影得到正轴测投影的投影变换矩阵

正等轴侧投影:投影后三根轴等同地缩短。a = b = c

正二轴侧投影:投影后三根轴向变形系数有两个等同。a = c = 2b


正三轴侧投影:投影后三根轴向变形系数三个各不相同。α和β的值随意取
斜平行投影
投影平面不垂直于投影方向的平行投影。
能像三视图那样在主平面上进行距离和角度测量,又能像正轴测投影那样同时反映物体的多个面,具有立体效果。
- 斜等轴测投影:投影方向与投影面成45°。和投影面垂直的任何直线段,其投影的长度不变。
- 斜二轴测投影:投影方向与投影面成arctg(2)和投影面垂直的任何直线段,其投影的长度为原来一半。
透视投影
特点:
视线是从视点出发,它是不平行的。(视点到投影面的距离有限)
在二维屏幕上表示物体三维空间位置的全部信息。
离观察者越近像越大,反之亦然。在远处的“汇聚点”处完全消失
透视投影缩小效应:
透视变换与视点(xv,yv,zv) 距离投影面的远近有关(zv)-正比
透视变换与物体(x,y,z)距离视点(xv,yv,zv)的远近有关(z-zv)-反比
当zv =0时,图形退化成一个点(汇聚点)
当zv→-∞时,为平行投影

当 y = 0 时, [ x’ y’ z’ 1 ] = [ x 0 z 1 ]
当 y→∞时, [ x’ y’ z’ 1 ] = [ 0 1/q 0 1 ]
当y→∞时,所有点的变换结果都集中到了y轴上的1/q处,即所有平行于y轴的直线将延伸相交于点(0,1/q,0)。该点称为灭点
当p≠0 , q = r = 0时,则将在x轴上的1/p 处产生一灭点,其坐标值为(1/p,0,0)。此时所有平行于x轴的直线将延伸交于该点。
当r≠0 , q = p = 0时,则将在z轴上的1/r 处产生一灭点,其坐标值为(0,0,1/r)。此时所有平行于z轴的直线将延伸交于该点。
灭点
一束不平行于投影面的平行线的投影将汇聚成一点,称作灭点(Vanishing Point)
透视投影的灭点个数有无限多个,不同方向的平行线在投影面上就能形成不同的灭点。
主灭点:平行于坐标轴的平行线在投影面上形成的灭点就是主灭点。
主灭点个数:因为有X、Y、Z三个坐标轴,所以主灭点个数最多有三个。
透视分类

一点透视:有一个主灭点,即投影面与一个坐标轴正交,与另外两个坐标轴平行。
两点透视:有两个主灭点,即投影面与两个坐标轴相交,与另一个坐标轴平行。
三点透视:有三个主灭点,即投影面与三个坐标轴都相交。
一点透视(平行透视)的变换矩阵
将三维形体平移到适当位置x0、y0、z0;
进行透视变换;
向XOZ平面作正投影变换,将结果变换到XOZ平面上。
(平移透视投影的原因:避免把物体安置在原点,产生平面或直线积聚成直线或点而影响图形直观性。)

两点透视(成角透视)的变换矩阵
投影面与一个坐标轴(Z轴)平行,即与XOZ平面和YOZ平面有一个夹角
绕Z轴正向转θ角
绕Z轴正向转θ角
向XOZ平面作正投影变换,将结果变换到XOZ平面上。
三点透视的变换矩阵
投影面与三个坐标轴都相交,即与XOY、YOZ、XOZ平面均有夹角。
绕Z轴正向转α角
绕X轴反向转β角
平移
令视点在Y轴,进行透视变换;
向XOZ平面作正投影变换,将结果变换到XOZ平面上。


视向变换
用户坐标系的点=>观察坐标系的点=>屏幕坐标系的点。
把用户坐标系中的点转换成观察坐标系中的点的过程
视向变换矩阵
1.平移——视点为坐标原点。
2. 旋转——绕X轴逆时针旋转90˚。
3. 旋转——绕Y轴顺时针旋转φ角,则Z轴垂直指向ZW。
4. 旋转——绕X轴逆时针旋转θ,则Z轴指向原点0。
5. 对称——做YOZ平面的对称变换使右手系变成左手系。
从坐标变换的角度来说,透视投影生成的过程就是把点在观察坐标系中的坐标变换到由透视平面决定的平面坐标系中的过程
设:F为透视平面与坐标系原点的距离
x*=F · x / z 和 y*=F · y / z
2.投影图的消隐
真实感图形
在现实世界,当观察一个不透明的物体时,我们只能看到该物体上朝向我们视线方向的那部分表面,而其余的表面不可见。
三维图形的表示方式
线框图:图上的线条为形体的棱边
消隐图:图上只保留了形体上看得见的部分。
真实感图形:能够表现形体的光照效果
线框图:在用户坐标系下定义的物体,经过空间转换、裁 剪,投影到观察平面,再变换到视图区并显示出来的图形。
物体的所有线条都被表示出来, 物体的形状不清楚,不真实。
消隐图:在线框图中消去图形中不可见部分,而只在图形中表现可见部分
三维物体表示方式:边界表示法
消除隐藏线算法
基本求交运算
- 两条直线相交(笛卡儿坐标系表示)
① 已知直线方程求交点的坐标

② 已知直线上两点,求直线方程

- 两线段相交(参数方程表示)
- 直线与异面相交


凸多面体表面外法线与可见性的关系
外法线:由物体内部指向外部空间的法线
外法线与可见性的关系
∵ 经过投影变换后在V面输出正投影图
∴ V平面是投影面,投影线 // Y轴 ∵ 外法线与Y轴的夹角β反映了外法线与视轴(投影线) 的夹角
∴ 根据β值判断该外法线代表平面的可见性

平面外法线方程与夹角β的计算
- 平面外法线

- 平面外法线与 Y 轴的夹角
外法线与y轴夹角的正负决定可见性,而外法线的求法E 与两边的叉积有关,所以两边的方向(顺序)非常重要
在向V(XOZ)面投影时,β与可见性有关;
在向H(XOY)面投影时,γ与可见性有关;
在向W(YOZ)面投影时,α与可见性有关。
利用物体外法线消去单个凸面体隐藏线的方法
-
单链三表结构:整个数据结构的形式是由三个数据表组成,
包括面表、环表、顶点表。
① 面表:二维数组存放一个面的信息,两个地址指针分别指出该面的面环在环表中的起始和终止位置。
② 环表:一维数组,对应于面表中的次序,存放每个面的面环。
③ 顶点表:三维数组(四维齐次坐标),存放顶点坐标。 -
绘图步骤
① 按照三表结构的形式建立描述立体模型的顶点表、环表和面表;
② 根据要生成立体图形的种类(正等轴测投影),采用相应变换矩阵对立体的顶点进行坐标变换;
③ 按照面表中的指示地址从相应的环表中取出顶点序号,利用变换后的顶点坐标对立体的面逐一计算出每个面的E值,根据E的正负判别面的可见性;
④ 对于可见面,按照该面所对应的环表连点绘出多边形的边框。


平面体的消隐算法
1.排斥试验
∵ 只有上下、前后、左右发生重叠的立体才会互相遮挡
∴ 将物体放入一个“最小盒子”中,用六个参数定义最小盒子:Xmax,Xmin,Ymax,Ymin,Zmax,Zmin如果两个“最小盒子”不相交,那两个物体肯定不相交。
2.包含性试验
线段如不包含在该平面图形内,则该线段不可能被遮住,也就不必进行深度比较。



这个算法是稳定的。假如算出来后代数和不是0,而是0.1或0.2,那么基本上可以断定这个点在外部,它是由计算误差引起的,实际上是0。

3. 检验深度
检验平面与直线之间的前后关系
① 粗率地检验(假设以 y 轴为观察方向)
如果一个平面多边形的y的最大值小于一条直线中y的最小值,则平面完全在线段之后。
② 精确地检验
4.平面体消隐算法基本思想及程序结构
① 计算各平面外法线方向的值E
E > 0,面向外,正面
E < 0,面向里,背面
E = 0,侧面
② 隐藏关系判断计算,计算各线段可见子段
③ 求各子段的交集


消除隐藏面算法
Z缓冲区(Z-Buffer)算法
Z缓冲区算法比较简单,但关键是它的消隐思路变了,借助外界的帮助来提高消隐算法的效率。能不能多花点内存,开一个和屏幕显示器(帧缓存,实际上就是一个1024×1024的数组,这个数组可以保留RGB的值)一样大的数组,来帮助记录像素的深度值。
帧缓存区用来存放每个像素的颜色值,初值可以放背景颜色;Z缓冲区用来存放每个像素的深度值,初值存放Z的最小值,因为视点在Z的无穷大处。
这样做就会带来一个很大的变化。假设现在有一个立方体,要把它画在屏幕上,立方体的 6 个面分别涂上不同的颜色,最终画在屏幕上应该是3个面可见3个面不可见。
先拿其中的一个面把它投影到屏幕上,投影的结果是变成一个多边形,然后进行扫描转换,结果是知道这个多边形所覆盖的像素。假如这个面是红色的,那就把这个面所包含的像素统统置成红色。这样就画出第 1 个面。同时把这个面的每个像素所对应那个点的Z值记到Z缓冲区里。
然后把立方体的第2个面拿来(假如是绿色),把它投影到屏幕上,再做扫描转换,转换后又得到一些新的像素,然后再对这些像素进行逐个处理。
判断一下在原来这个位置是否画过红颜色,如果没画过,就放心地把绿颜色画上去;如果已经画过红颜色怎么办?就看谁在前面谁在后面。
因为红颜色像素的那个点的深度值Z值是知道的,再算一下绿的这个面在这一点的Z值,然后这两个Z值进行比较,如果比红的Z值小,就说明在红的后面,就不画了;如果Z值大于红的,就画绿的,同时把Z-Buffer里的这点的Z值用绿颜色的Z值替换。也就是说,Z缓冲区里的Z值总是保留这个像素所对应空间点的最大Z值。
接着再画第3个面、第4个面等,最后就得到结果了
Z-Buffer算法比较简单,也很直观,代价就是要开这个Z缓冲区。在像素级上以近物取代远物,形体在屏幕上的出现顺序是无关紧要的。
改进算法:用一个深度缓存变量zb,取代与图像大小相等的缓存数组ZB
Lesson 6 曲线和曲面
1.基本概念
1.自由曲线和自由曲面
形状比较复杂,不能用简单方程描述的曲线 / 面。
2.由离散点绘制两类图形
由实验、观测、数值计算获得的数据是离散的,根据这些有序点列构造出一条光滑曲线,以直观地反映出实验特性、变化规律和趋势等。分为两类:
- 数据较精确,误差小至可忽略不计。
可绘制一条光滑曲线,使其通过全部数据点(型值点)。包括:
① 曲线 / 面拟和:用一组型值点来指定曲线 / 面的形状时,形状完全通过给定的型值点列。
② 曲线 / 面插值:给定型值点之间曲线 / 面上的点 - 数据有显著误差,个别点误差较大
不宜使所绘的曲线 / 面通过全部数据点(型值点)。
① 曲线 / 面逼近:用一组数据点来指定曲线 / 面的形状时,形状不必通过数据点列,使曲线 / 面上的点与数据点的平均距离最小。
② 曲线 / 面逼近:用一组数据点来指定曲线 / 面的形状时,形状不必通过数据点列。
将连接数据点的直线序列称为特征多边形。
3.参数方程
三维空间曲线上的点:p(t)=( x(t), y(t), z(t) )
三维空间曲面上的点:p(u,w)=( x(u,w), y(u,w), z(u,w) )
优点:
① 与坐标系的选取无关;
② 突出参数对因变量的影响;
③ 不会出现斜率为无穷大的情况;
④ 所产生的曲线 / 面有界限
例如:
直线段的参数方程:p(t)=p0+(p1-p0)t=(1-t)p0+tp1 t∈[0, 1 ]
圆的参数方程:p(t)=(cost, sint) t∈[0, 2Π ]
椭圆的参数方程:p(t)=(acost, bsint) t∈[0, 2Π ]
4.参数曲线的表示形式

切矢量:求导


f=[ f1 f2 f3 f4 ] 为调和函数,表明一个点对整段曲线所起的作用。
通过端点及其切矢量产生整个t值范围内的其余各点列的坐标,并且只与参数t有关。便于通过修改边界条件来改变曲线的形状。
Hermite参数曲线的零阶调和函数:

t=0时,f1决定p(t)的值,此时f2=f3=f4=0,且f2=1-f1
随着t从0→1,f1的作用减小到零,t=1时,f2=1
Hermite参数曲线的一阶调和函数:

t=0时,f’3决定p(t)的值,此时f’1=f’2=f’4=0
随着t从0→1,f’3的作用减小到零,t=1时,f’4=1
5.曲线段的光滑连接
由离散点列产生的曲线不仅要求两点之间的曲线段是光滑
的,也要求两曲线段在连接点也是光滑的。
- q1(1)=q2(0),即q1(t)和q2(t)的端点重合于p,c0连续;
- q1(1)和q2(0)在p点处重合,且其在p点处的切矢量方向相同,大小相等,则c1连续;
- q1(1)和q2(0)在p点c0,c1连续且其q’‘1(1)和q’'2(0)大小和方向均相同,则c2连续
6.四点式曲线
已知四个点p1、p2、p3、p4,具有连续的 t 值,且 t1<t2<t3<t4,构造一条参数曲线,求它的几何形式。



2.抛物样条曲线
用抛物线作为基本曲线来拟合给定离散点所生成的曲线。
抛物线调配曲线,计算方法简单,后面的计算不影响前面结果,节点处c1连续,c2不连续,在精度要求不高的情况下常被选用。
1.由任意3点定义的抛物线绘制抛物线调和曲线
一次贝塞尔表达式(2)
二次贝塞尔曲线表达式 (3)
t=0时,过p1点且与p1p2相切;t=1时,过p3点且与p2p3相切
2.过抛物线上3点的曲线段
3.抛物线调配曲线的计算公式
设有离散点列pi(i=1,2,……,m),用过3点作抛物线的方法可作m-2条抛物线段

4.端点讨论
pi+1(t)前后用4个已知点,只能作出m-3段曲线,首尾两段未包括在内。
解决方法:补点p0 和 pm+1
① 已知两端点的切矢量p’1和p’m
∵ p’1 = p2 – p0 ∴ p0 = p2 – p’1
∵ p’m = pm+1 – pm-1 ∴ pm+1 = p’m+pm-1
② 自由端条件
使 p0 与 p1,pm+1与pm重合即可。 p0=p1 ,pm+1=pm
③ 形成封闭曲线
令 p0=pm, pm+1=p1 ∵ 多一段pmp1 ∴ pm+2=p2
void parspl(int p[][2], int n, int k, int e)
{
int x,y,i,j,m;
float t1,t2,t3,t,a,b,c,d;
if(e==1)
{
m=n;
p[0][0]=p[1][0];p[0][1]=p[1][1];
p[n+1][0]=p[n][0];p[n+1][1]=p[n][1];
}
else
{
m=n+1;
p[0][0]=p[n][0];p[0][1]=p[n][1];
p[m][0]=p[1][0];p[m][1]=p[1][1];
p[m+1][0]=p[2][0];p[m+1][1]=p[2][1];
}
t=0.5/k;
moveto(p[1][0],p[1][1]);
for(i=0;i<m-1;i++)
{
for(j=1;j<k;j++)
{
t1=j*t;t2=t1*t1;t3=t2*t1;
a=-4.0*t3+4.0*t2-t1;
b=12.0*t3-10.0*t2+1.0;
c=-12.0*t3+8.0*t2+t1;
d=4.0*t3-2.0*t2;
x=a*p[i][0]+b*p[i+1][0]+c*p[i+2][0]+d*p[i+3][0];
y=a*p[i][1]+b*p[i+1][1]+c*p[i+2][1]+d*p[i+3][1];
lineto(x,y);
}
lineto(p[i+2][0],p[i+2][1]);
}
}
3.Bezier贝塞尔曲线
Bezier曲线的形状是通过一组多边折线(Bezier多边形或特征多边形)的各顶点唯一的定义出来的。
- 特征多边形的各顶点中,只有第一点和最后一点在曲线上,其余的点则用以定义曲线的导数、阶次和形状。
- 第一条边表示曲线在起点处的切线方向,最后一边表示曲线在终点处的切线方向。
- 曲线在两端点处的 r 阶导数只与 r+1 个相临点有关,而与更远的点无关。


性质:
对称性:若保持原Bezier曲线全部顶点pi位置不变,次序颠倒,新的特征多边形的顶点pi*=pn-i,(i=0,1,…n),则新Bezier曲线形状不变,走向相反。
正性:Bi,n(t)≥0,t∈[0,1]
凸包性:

一次Bezier曲线
n=1时是连接两点的直线段。

二次Bezier曲线
n=2时线对应一条起点在p0,终点在p2处的抛物线

三次Bezier曲线

4.B样条曲线
保持原Bezier曲线的优点,用n次B样条基函数代替伯恩斯坦基函数Bi,n(t),构造了B样条曲线。
① 可以对曲线进行局部修改;
② 多项式次数降低,与型值点数目无关;
③ 对特征多边形更逼近。
连接全部n次曲线段所组成的整条曲线就是n次B样条曲线。依次用线段连接pi+k(k=0,1,…n)组成的多边形称B样条曲线在第i段的特征多边形。
n次B样条曲线可达到n-1阶连续Cn-1
一次B样条曲线
n=1(k=0,1)时是连接两点的直线段。

二次B样条曲线
n=2(k=0,1,2)时是一条抛物线

三次B样条曲线
由m个顶点定义的三次B样条曲线,是由 (m-3) 段三次曲线段连接而成,且连接处C2 连续

本文详细介绍了计算机图形学中的二维和三维图形变换,包括窗口与视图变换、平移、比例、旋转、齐次坐标技术以及三维变换。此外,还讲解了三维图形的投影变换,如正投影、透视投影、消隐算法,以及曲线和曲面的基本概念和类型,如Bezier曲线和B样条曲线。
2008

被折叠的 条评论
为什么被折叠?



