分形图形学实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

分形图形学实验报告指导
实验报告要求
1.实验名称
2.实验目的、要求
3.实验主要内容(某某算法的实现)
4.实验过程(程序流程图、源代码)
5.实验结果(附上打印的图形)
6.实验小结
实验报告一一般分形图形生成实验目的
1.Koch曲线、Sierpinski三角形、Cantor集的计算机实现
2.掌握用迭代、递归生成分形
实验内容及步骤
1、Koch曲线
函数:plot(x1,y1) –(x2,y2)
(画直线函数)
sin( )(正弦函数)
cos( )(余弦函数)
ArcTan( )(反正切函数)
2、Sierpinski三角形
函数:plot(x1,y1) –(x2,y2)
(画直线函数)
sin( )(正弦函数)
cos( )(余弦函数)
3、Cantor集
实验报告二L系统语言生成分形图形实验目的
1.掌握用L系统语言生成分形
2.Koch曲线、Sierpinski三角形、Cantor集的L系统实现
实验内容及步骤
1.编写程序用L系统语言生成分形图形
1)编写程序生成Koch曲线:初始图形是一条线段,生成过程是将线段中间1/3向外折起。

程序伪码如下:
KochCurve { ;柯赫曲线
Angle 6 ;角度增量是60°
Axiom F ;初始图形是一单位线段
F=F+F--F+F ;产生式是将线段中间1/3折起
} ;结束
2)用L系统再次生成Sierpinski三角。

生成Sierpinski三角的伪码如下:
Hilbert{ ;Sierpinski三角,1996-12
Angle 4
Axiom Y ;初始串为任意字母Y
X=-YF+XFX+FY- ;第一个生成规则
Y=+XF-YFY-FX+ ;第二个生成规则,由以上规则不断代换
}
3)模拟草本植物。

注意这里出现了“括号”——可以方便地表示树枝,伪码如下:
HerbPlant { ;生成植物,本程序使用了括号
Angle 14
Axiom Z
Z=ZFX[+Z][-Z]
X=X[-FFF][+FFF]FX
}
实验报告三逃逸时间法生成Mandelbrot 集与Julia集
实验目的
1.掌握逃逸时间法
2.Mandelbrot集与Julia集的计算机实现
实验内容及步骤
1.编写程序生成Mandelbrot集
在复迭代中影响最大的当属迭代z→z^2+c,实际上它只是形式更一般的复解析迭代
z_(n+1)=F(z_n)+c的一种, F是一个非线性函数。

显然z→z^2+c也是最简单的一种,它在复迭代中的地位相当于逻辑斯蒂映射x_(n+1)=ax_n(1- x_n)在实迭代中的地位(见第八章)。

考虑一般形式的F,令z=x+iy,c=c_( X)+ic_(Y),其中i表示虚数,i=SQRT(-1)。

分离实部与虚部,具体化迭代关系便有:
x→f(x,y)+c_(X),y→g(x,y)+c_(Y).
通常所说的M集是迭代二次函数z→z^2+c产生的,此函数具体化就是
x→x^2-y^2+c_(X),y→2xy+c_(Y).
其中z=x+i y,c=c_(X)+i c_(Y ),以横轴x记录实数的实部,以纵轴y记录实数的虚部。

M集合实际上是常数c=(c_(X),c_(Y))构成的图象。

让c从屏幕左上角开始变化,逐行增加,一直变到屏幕右下角。

如果取的区域是200×2 00,则一共要计算40,000个点,把计算的结果用不同的颜色标记下来,就得到一幅图象,这就是M集。

对于不同的c值,如何得到表征迭代性质的不同的结果呢?
容易知道,无穷远处肯定是迭代的一个吸引子,即对于复平面上相当多的初始条件,迭代最终都跑到无穷远处。

但研究发现,在原点附近还存在一个奇特的区域,在迭代过程中此区域永远不会跑掉。

在非严格的意义上,这个不变的集合就是M集,我们的主要任务就是画出这个集合的边界——实际上边界是分形曲线,极其复杂,M集图象的全部魅力就在这里。

在复平面上,我们以原点(0,0)作为参考点,观察迭代过程是否远离原点,以及逃离原点的速度如何。

为此规定一个距离函数D=x^2+y^2,
其实D有许多不同的取法,以上取法是最普通的。

可以看出,如果D较大,表明迭代点离原点较远,如果D较小,表明迭代点离原点较近。

假设对于任何一个c,迭代都从(x_0,y_0)=(0,0)开始,我们观察迭代点列
(x_1,y_1),(x_2,y_2),(x_3,y_3),… ,(x_(100),y_(100)),…
的变化状况。

每一次都计算一下D值,即该点与原点(0,0)的距离(为方便计,这里实际上计算的是距离的平方)。

取一个参考距离R,不妨取得大一些,比如R =40(实际上取20就足够了)。

现在想知道迭代多少次后实际的距离D大于R 。

在迭代过程中如果D小于R,则继续让计算机迭代,要规定一个上限,比如300次。

如果迭代了300次后结果仍然不跑掉(即D仍然小于R),则可以近似认为此点属于M集合。

对于迭代次数小于300次的情况,如果迭代10次D就大于R,则标记c点为白色;如果迭代35次D开始大于R,则标记c点为红色;如果迭代 110次D开始大于R,则标记c 点为蓝色,等等。

2.编写程序生成Julia集
一个M集可以对应无数种J集,实际上M集就是所有J集的浓缩。

M集不同部位的形状,反映了对应于该处的J集的形状,于是用M集可以对J集进行分类,至少在计算机图形学的层次上可以这样说。

计算J集时,初始迭代点就不能总取(0,0)了,而是要根据实际位置取实际的 (x,y)坐标值。

仍以迭代z→z^2+c为例说明。

先取定一个c值,比如c=(1.0221,0.2433),迭代关系化为
x→x^2-y^2+1.0221,y→2xy+0.2433.
从屏幕左上角算起,逐行计算,一直算到屏幕右下角。

当然,也可以不取整个屏幕那么大,只选一个200×200的小区域做。

标色的原理与上面讲M集合时完全类似,此略。

改变常数c的取值,可以得到各式各样的J集。

3.比较M集与J集的区别与联系
在源程序中,M集与J集的计算方法十分相似,只需改变两处语句就可以互换为对方。

相关文档
最新文档