分形图形学实验指导————————————————————————————————作者: ————————————————————————————————日期:ﻩ分形图形学实验指导实验一二维空间上的分形图形生成实验目的1.Mandelbrot集与Julia集的计算机实现2.掌握用L系统语言生成分形实验内容及步骤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×200,则一共要计算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集的计算方法十分相似,只需改变两处语句就可以互换为对方。
初始迭代点迭代关系说明M集x0:=0;y0:=0;x1:=f(x,y)+p0;y1:=g(x,y)+q0;p_0,q_0不断变化J集x0:=p0;y0:=q0;x1:=f(x,y)+c_X;y1:=g(x,y)+c_Y;< /TD>c_(X),c_(Y)固定不变4.编写程序用L系统语言生成分形图形1)编写程序生成柯赫曲线:初始图形是一条线段,生成过程是将线段中间1/3向外折起。
程序伪码如下:KochCurve{ ;柯赫曲线Angle 6 ;角度增量是60°Axiom F;初始图形是一单位线段F=F+F--F+F ;产生式是将线段中间1/3折起} ;结束2)用L系统再次生成希尔伯特曲线。
生成希尔伯特曲线的伪码如下:Hilbert{ ;希尔伯特曲线,1996-12Angle 4Axiom Y ;初始串为任意字母YX=-YF+XFX+FY-;第一个生成规则Y=+XF-YFY-FX+ ;第二个生成规则,由以上规则不断代换}3)模拟草本植物。
注意这里出现了“括号”——可以方便地表示树枝,伪码如下:HerbPlant { ;生成植物,本程序使用了括号Angle 14AxiomZZ=ZFX[+Z][-Z]X=X[-FFF][+FFF]FX}ﻬ实验二高维空间的分形图形生成实验目的1.了解三维L-系统生成高维空间分形图形的方法2.掌握四元数生成Mandelbrot集和Julia集3.掌握随机中点位移法实验内容及步骤1.编写程序,使用四元数生成Mandelbrot集和Julia集通常我们是在二维复平面上研究广义的M集和J集,也可以通过“四元数” (quaternions)将它们推广到高维空间中去。
在二维复平面中表示复数只用两个基向量:1和 i。
在四维空间中讨论超复数,现在有四个基向量:1,i, j和k。
任一复数可以表示为q=x+yi+zj+qk.超复数基向量之间的运算关系(注意,不同于传统上四元数基向量之间的运算关系)为:ij=k,jk=-i,ﻫki=-j,ji=k,kj=-i,ik=-j,ﻫii=jj=-kk=-1,ijk=1.注意,运算关系的规定多少有些任意性,也可以规定i^2=j^2=k^2=+ 1。
在四维空间H中也可以研究迭代x→x^2+c下的超朱丽亚集J,选一个截面,将超朱丽亚集投影到三维空间中,可以得到立体的J集图象。
实验三分形混沌动力系统实验目的1.了解动力系统概念2.掌握Julia复动力系统及其IFS诠释3.了解混沌的概念;实验内容及步骤1.使用IFS方法,编写生成Julia复动力系统的程序通过IFS方法还可以绘制朱丽亚集J。
设z→z^2+c,求出两个逆变换:w_1(z)=SQRT(z-c),w_2(z)=-SQRT(z-c),取概率(p_1,p_2)=(1/2,1/2),迭代后生成的吸引子实际上就是各种朱丽亚集!IFS方法、L系统、混沌动力学以及有关 M集和J集的迭代,事实上都是相互关联着的,这种关联体现了非线性科学的内在逻辑。
算法:Julia_IFS标题:Julia集的IFS算法参数:z(迭代次数)PI(π值)RAND_MAX(随机最大值)变量:k(概率变量)x,y(z的实部和虚部)cx,cy(c的实部和虚部)r(极距)a,b,e,f,m,n,wx,wy,theta函数:Pset(x,y) (画点函数)Rand(随机函数)sin(正弦函数)cos(余弦函数)atan(反正切函数)BEGINFOR i=1 TO zm=a*x+en=b*y+fIF i>10 THENPset(m,n)ENDIFwx=x-cxwy=y-cyIFwx>0 THENtheta=atan(wy/wx)ENDIFIF wx<0 THENtheta=PI+atan(wy/wx)ENDIFIF wx=0THENtheta=PI/2ENDIFtheta=theta/2r=sqit(wx*wx+wy*wy) k=randrnd=k/RAND_MAX IF rnd<0.5 THENr=sqrt(r)ELSEr=-sqrt(r)ENDIFx=r*cos(theta)y=r*sin(theta) ENDFOREND实验四分形图像压缩实验目的1.掌握冗余度压缩(熵编码)2.限失真编码(熵压缩)3.掌握分形图像压缩的原理与方法4.编程实现分形图像压缩。
实验内容及步骤1.使用IFS方法,编程实现简单自相似图像谢尔宾斯基基垫压缩分形图像压缩是利用原始图像所具有的自相似性,构造一个迭代函数系统(IFS),利用IFS抽取图像的自相似性,即用图像中的一个子块经过分形仿射变换来逼近同一图像中的另一子块,而且仅仅将仿射变换系数记录下来,从而达到压缩图像数据的目的。
以谢尔宾斯基基垫为例加以说明,如下图。
可以看出,整个垫子是由上、左下、右下3个较小的垫子组成。
每个较小的垫子是由原来的垫子经收缩仿射变换得来的。
如果能分别找出把原图形变成3个小图形的收缩放射变换,那么,整个迭代函数系统就定下来了。
设原来垫子3各顶点的坐标分别为(x1,y1),(x2,y2),(x3,y3)。
变换所得小垫子的3个顶点坐标为(x'1,y'1),(x'2,y'2),(x'3,y'3)。
图2.3(b)表示的是把原电子变为上面小垫子的坐标。
把W1的变换式展开:ﻫx'1=a1x1+b1y1+e1ﻫy'1=c1x1+d1y1+f1x'2=a1x2+b1y2+e1ﻫ y'2=c1x2+d1y2+f1ﻫx'3=a1x3+b1y3+e1ﻫ y'3=c1x3+d1y3+f1解这组方程得到变换W1的各系数。
代入以上方程组,得到。
同理,利用左下方垫子和右下方垫子可求出变换W2和W3的系数。
分别为:a2=d2=0.5,b2=c2=e2=f2=0,a3=d3=0.5,b3=c3=f3=0,e3=1.ﻬ实验五分形图像压缩程序设计实验目的1.理解局部迭代函数系统2.了解四叉树方法3.了解自适应合并法4.了解与向量量化的混合优化方法实验内容及步骤1.设计编写一个分形图像压缩程序实现基本图像压缩,并分析所采用算法实现的优缺点。