分形图形学实验指导.docx
- 文档编号:26480713
- 上传时间:2023-06-19
- 格式:DOCX
- 页数:9
- 大小:35.91KB
分形图形学实验指导.docx
《分形图形学实验指导.docx》由会员分享,可在线阅读,更多相关《分形图形学实验指导.docx(9页珍藏版)》请在冰豆网上搜索。
分形图形学实验指导
分形图形学实验指导
实验一二维空间上的分形图形生成
实验目的
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+iy,c=c_(X)+ic_(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;
c_(X),c_(Y)固定不变
4.编写程序用L系统语言生成分形图形
1)编写程序生成柯赫曲线:
初始图形是一条线段,生成过程是将线段中间1/3向外折起。
程序伪码如下:
KochCurve{;柯赫曲线
Angle6;角度增量是60°
AxiomF;初始图形是一单位线段
F=F+F--F+F;产生式是将线段中间1/3折起
};结束
2)用L系统再次生成希尔伯特曲线。
生成希尔伯特曲线的伪码如下:
Hilbert{;希尔伯特曲线,1996-12
Angle4
AxiomY;初始串为任意字母Y
X=-YF+XFX+FY-;第一个生成规则
Y=+XF-YFY-FX+;第二个生成规则,由以上规则不断代换
}
3)模拟草本植物。
注意这里出现了“括号”——可以方便地表示树枝,伪码如下:
HerbPlant{;生成植物,本程序使用了括号
Angle14
AxiomZ
Z=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(反正切函数)
BEGIN
FORi=1TOz
m=a*x+e
n=b*y+f
IFi>10THEN
Pset(m,n)
ENDIF
wx=x-cx
wy=y-cy
IFwx>0THEN
theta=atan(wy/wx)
ENDIF
IFwx<0THEN
theta=PI+atan(wy/wx)
ENDIF
IFwx=0THEN
theta=PI/2
ENDIF
theta=theta/2
r=sqit(wx*wx+wy*wy)
k=rand
rnd=k/RAND_MAX
IFrnd<0.5THEN
r=sqrt(r)
ELSE
r=-sqrt(r)
ENDIF
x=r*cos(theta)
y=r*sin(theta)
ENDFOR
END
实验四分形图像压缩
实验目的
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+f1
x'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.设计编写一个分形图像压缩程序实现基本图像压缩,并分析所采用算法实现的优缺点。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图形学 实验 指导