计算机图形学重点和难点指导 联系客服

发布时间 : 星期三 文章计算机图形学重点和难点指导更新完毕开始阅读504283a1af45b307e87197ae

两段三次Bezier曲线达到G0连续性的条件是:P3=Q0。达到G1连续性的条件是:P2、Koch曲线; P3(Q0)和Q1三点共线,且P2和Q1位于P3(Q0)的两侧。由式(7-8)有

p'(1)?3(P3?P2) ,q'(0)?3(Q1?Q0)

达到G1连续性,有

p'(1)???q'(0)

即 P3?P2??(Q1?Q0) 式中,?为比例因子。 由于P3=Q0,有

Q0?

P2??Q1

1??G1连续性条件的要求P3(Q0)是在P2Q1连线上位于P2和Q1两点间的某处。特别地,

若取?=1,有Q0?(P2?Q1) 2,即P3(Q0)是P2 Q1连线的中点。?对P3(Q0)位置的影响如图23所示。

P1P2P3Q0Q2Q3P1P2Q2Q0P1P2Q2P0P0P3Q3P0P3Q0Q3Q1Q

(a)?=0.5 (b)?=1 (c)?=2

图23 ?对拼接位置的影响

第8章 分形几何

重点: 递归算法;Koch曲线;Menger海绵;龟形图法;L系统绘制Koch曲线;分形草; 难点:压缩仿射变换;拼贴方法确定IFS码; 1. 递归算法;

在调用一个函数的过程中,直接或间接地调用函数自身,称为递归调用。例如n!递归公式表示如下:

Q11?1,n!???n(n?1)!,(n?0,1)

(n?1)阶乘的递归子函数如下:

long fac(int n) //阶乘函数factorial {

long f;

if (n==0 || n==1)

f=1; //0!和1!的值为1

else

f= n*fac(n-1); //n>1时,进行阶乘递归调用

return f; //将阶乘计算值返回给主函数 }

2. Koch曲线

19世纪以来,一些著名的数学家在对曲线进行的深入研究中,创造了一系列结构、形态与传统的欧氏几何曲线完全不同的曲线。例如,Cantor集、Koch曲线、Peano-Hilbert曲线、Sierpinski垫片与地毯、Menger海绵等。这些曲线在欧几里得几何学看来都有无法解释的“病症”,才被贬为“病态曲线”。分形几何学创立之后,人们才发现,这些“病态”曲线正是大自然中普适的几何对象,例如海岸线的边界曲线就是Koch曲线。

生成规则:取一段长度为L0的直线段,将其三等分,保留两端的线段,将中间一段改换成夹角为60°的两个L0/3等长直线段;将长度为L0/3的4段直线分别三等分,并将它们中间的一段改换成夹角为60°的两段L0/9等长直线。依此类推,便得到具有自相似结构的折线,称为Koch曲线。如图23所示。“病态”原因:处处连续,处处不可导。分形维数:D=ln4/ln3≈1.26186。

图23 Koch曲线

如果在等边三角形上按上述规则在每边的中间各凸起一个小三角形,这样一直进行下去,则曲线形状近似为一朵雪花,称为Koch雪花,如图24所示。理论上可以证明这种不断构造的雪花周长是无穷的,但其面积却是有限的,这与传统的数学观念是不相符的,采用周长和面积都无法刻划出这种雪花的特点,欧氏几何学对描述Koch雪花无能为力。

图24 Koch雪花

3. Menger海绵

生成规则:将一个立方体沿其各个面三等分为27个小立方体,舍弃位于体心的一个小立方体,以及位于立方体六个面心处的6个小立方体。将剩余的20个小立方体继续按相同的方法分割并舍弃位于立方体体心和面心处的更小的立方体。如此不断地分割与舍弃,就能得到中间有大量空隙的Menger海绵。如图25所示。“病态”原因:有限体积具有无限表面积,也就是说:当用二维得尺度去测量时,其值趋于无穷大,当用三维尺度去度量时,其值趋于零。分形维数:D=ln20/ln3≈2.7268。

绘制Menger海绵要注意消隐方法。Menger海绵是三维物体,可以使用正交投影、透视投影或轴测投影绘制旋转动画,但同时需要正确消隐才能绘制出图形,这些内容讲解起来非常复杂。常采用一种简单的斜等测图的绘制方法。Menger海绵的斜等测投影图仅由“前面”、“顶面”和“右面”3个表面就可以表示。由于Menger海绵的“前面”平行于投影方向,其斜等测投影事实上是正方形,Menger海绵的“顶面”和“右面”的斜等测投影是平行四边形。

Menger海绵可以看成是由上、中、下三层组成,其下层和上层分别由8个小立方体组成,每层的中间是空心的。中层由4个立方体组成,这4个立方体分别位于4个边角上。为了更好地显示立体效果,必须进行消隐,可以采用画家算法来完成,这是在下一章将要介绍的物体表面消隐方法之一。画家算法表述如下:假定视点位于屏幕右上方,先从距视点最远的小立方体开始,由远及近,逐个绘制小立方体,当远、近两处的小立方体投影重叠时,则距离视点近的小立方体将遮住距离视点远的小立方体,屏幕上将显示距离视点近的小立方体颜色。由于绘制的是斜投影,所以需要对Menger海绵的左右层、上下层、前后层分别实施画家算法:对上下层,由下向上逐个绘制;对左右层,由左向右绘制;对前后层,由后向前逐个绘制。这个过程好像画家绘制油画那样,由远及近绘制景物,近处的景物将遮盖远处的景物。在绘制Menger海绵时,动画过程就象砌砖那样从下往上,一层一层地构筑,每一层从左向右,从后向前依次绘制。

图25 Menger海绵

4. 龟形图法

设想有一只乌龟在海滩上爬行,其当前状态用三个参数描述,记为S(x , y , α),其中x , y 为乌龟所在位置的直角坐标,α为乌龟爬行的方向。假定乌龟爬行的步长为d,在爬行方向α上的角度改变量为θ,下面给出绘图规则说明。

(1)F:向前爬行一步d并画线; 乌龟的新状态为S’(x’,y’,α),其中

x'?x?dcos?

y'?y?dsin?从(x,y)向(x’,y’)画一条线。

(2)+:逆时针旋转θ角,乌龟的新状态为S’(x’,y’,α+θ); (3)-:顺时针旋转θ角,乌龟的新状态为S’(x’,y’,α-θ);

(4)[ :将当前乌龟爬行的状态压入堆栈,信息包括乌龟所在的位置与方向等,但不画线;

(5)] :从堆栈中弹出一个状态作为乌龟的当前状态,但不画线; 5. L系统绘制Koch曲线

绘图规则如下:

(1)F:生成元最小线元长度,步长为d。 (2)+:逆时针方向旋转θ角。 (3)-:顺时针方向旋转θ角。 文法模型如下:

字母表为:F,+,-。

初始字母为:F。

生成规则:F→F+F――F+F,如图26所示。 迭代结果如下: 迭代0:F。

迭代1:F+F――F+F。

迭代2:F+F――F+F+F+F――F+F――F+F――F+F+F+F――F+F。 ?

-θ -θ F F P0

F +θ +θ 图26 Koch曲线L系统模型

P1

F 6. 分形草

绘图规则如下:

(1)F:代表主干和旁枝,步长为d。 (2)+:逆时针方向旋转θ角。 (3)-:顺时针方向旋转θ角。

(4)[:将当前状态压栈,存储分支结点。

(5)]:将图形状态重置为栈顶的状态,恢复分支结点。 文法模型如下:

字母表为:F,+,-,[,]。 初始字母为:F。

生成规则为:F→FF[++F―F-F][-F+F+F] ,如图27所示。 迭代结果如下: 迭代0:F。

迭代1:FF[++F―F-F][-F+F+F]。

迭代2:FF[++F―F-F][-F+F+F] FF[++F―F-F][-F+F+F] [++FF[++F―F-F][-F+F+F]-FF[++F―F-F][-F+F+F]-FF[++F―F-F][-F+F+F] ][-FF[++F―F-F][-F+F+F]+FF[++F―F-F][-F+F+F]+FF[++F―F-F][-F+F+F]]。

?