文档库 最新最全的文档下载
当前位置:文档库 › 四元数Julia分形及其Java编程

四元数Julia分形及其Java编程

四元数Julia分形及其Java编程
四元数Julia分形及其Java编程

北方民族大学学士学位论文

论文题目:四元数Julia分形及其Java编程

院(部)名称:信息与计算科学学院

学生姓名:王江林

专业:信息与计算科学学号:20040328指导教师姓名:李水根教授

论文提交时间:2008年5月25日

论文答辩时间:2008年5月31日

学位授予时间:

北方民族大学教务处制

四元数Julia分形及其Java编程

摘要

分形是近几十年发展起来的一门新的数学分支,它涉及的领域非常之广,有物理学、数学、化学、生物学、医学、地震学、地貌学、冶金学、材料学、哲学、经济学、社会学等等.分形的出现正在改变科学家观察自然界的传统方式,目前已对当今数学乃至整个科学界产生了巨大的影响.

本文主要对分形几何中的四元数进行研究,运用四元数绘制二维和三维Mandelbrot集和Julia集,并用Java语言编程实现.先后介绍了分形的产生、Mandelbrot集和Julia集、四元数分形和用四元数绘制三维Mandelbrot集和Julia 集的数学理论,为软件设计奠定了理论基础,使软件开发具有可行性.软件设计采用面向对象的程序设计方法,用UML对软件进行建模,建立了用例图和类图,用例图用来说明所开发的软件具的功能,类图提供了指导对象定义和使用的一些主要规则.再根据所建立的UML模型生成整个软件.

本文的重点是把分形理论用于计算机实践,设计出分形软件,本软件的主要功能是用四元数绘制Julia集,由于Mandelbrot集和Julia非常相似,也有紧密的内在联系;二维与三维在理论和程序实现上都相差甚小.所以同时也实现了二维和三维Mandelbrot集和Julia集的绘制.最后给出软件的运行结果,包括软件的运行效果和绘制的一些分形图形.

关键词:分形,四元数,Julia集,Java程序设计

I

Quaternion Julia Fractal and Java Program Design

Abstract

The Fractal is a new mathematics branch which develops for several decades, it involve of realm very it is wide, there is physics, mathematics, chemistry, biology, medical science, earthquake learn, the geography learn, the metallurgy learn, the material learn, philosophy, economics, sociology etc….The emergence of the Fractal is change the traditional way of the observation nature of scientist and have already been go to the whole science field to produce huge influence nowadays to mathematics currently.

This text mainly carries on a research to Fractal several quaternions in and the usage quaternion draws two dimensions and 3D Mandelbrot Set and Julia to gather and counteract the Java language plait distance a realization.Creation, Mandelbrot Set and Julia which successively introduced a Fractal gather, quaternion Fractal with draw the mathematics theories that 3D Mandelbrot Set and Julia gather with the quaternion, lay theories foundation for the software design, make the software development have a possibility.The software design adoption faces to the program design method of object, use UML to carry on setting up a mold to the software, built up use case diagram and class diagram, the use case diagram uses to explain the software develop to have of function, the class diagram provided instruction object definition and use of some main rules.According to the UML model build up born whole software.

The textual point useds for the calculator fulfillment to the Fractal theories, design a Fractal software, the main function of this software draws a Julia Set with the quaternion, because the Mandelbrot Set is very similar to the Julia, also is close inside

contact;Two-dimensional and 3D in carrying out the theories and the procedure all differ very small.So also carried out two dimensions and 3D Mandelbrot Set and Julia to gather in the meantime of draw.Finally give circulate of a software result, include the movement effect of software with draw of some Fractal sketches.

Key Words:Fractal,quaternion,Java program design

II

目录

摘要.................................I 前言 (1)

第一章早期数学怪物与分形几何 (2)

1 Von Koch(冯.科克)曲线 (2)

2 Sierpinski(希尔宾斯基)三角形 (4)

3 Cantor(康托)集 (5)

4 Mandelbrot和他的分形几何 (6)

第二章 Mandelbrot集与Julia集 (8)

1 Mandelbrot集 (8)

2 Julia集 (9)

第三章四元数分形与四元数Mandelbrot集和Julia集 (11)

1 四元数基本理论 (11)

2 四元数Mandelbrot集和Julia集 (14)

第四章分形软件设计 (15)

1 用例图 (15)

2 类图 (16)

3 关键算法 (20)

4 软件运行结果 (27)

5 绘制的部分图形 (30)

结论 (37)

致谢 (38)

参考文献 (39)

附录 (40)

III

图表目录

图1-1冯.科克曲线 (2)

图1-2 von Koch曲线 (3)

图1-3 Sierpinski三角形 (4)

图1-4 Cantor三分集 (5)

图1-5 几何体与维数 (6)

图2-1 Mandelbrot集的坐标图 (8)

图2-2 Julia集(c=1.1) (9)

图2-3 Mandelbrot集和Julia集 (10)

图2-4 c不同的Julia集 (10)

图4-1 用例图 (16)

图4-2 类图 (17)

图4-3 main包类图 (18)

图4-4 iterator包类图 (19)

图4-5 fractal包类图 (19)

图4-6 util包类图 (20)

图4-7 主程序运行结果 (28)

图4-8 文件子菜单 (28)

图4-9 大小子菜单 (29)

图4-10 窗口布局 (29)

图4-11 外观菜单 (29)

图4-12 二维Mandelbrot集 (30)

图4-13 二维Julia集之一 (30)

图4-14 二维Julia集之二 (31)

图4-15 三维Mandelbrot集之一 (31)

图4-16三维Julia集之一 (32)

图4-17 三维Julia集之二 (32)

图4-18 三维Julia集之三 (33)

图4-19 三维Julia集之四 (33)

图4-20 三维Julia集之五 (34)

图4-21 三维Julia集之六 (34)

图4-22 三维Julia集之七 (35)

图4-23 三维Julia集之八 (35)

图4-24 三维Julia集之九 (36)

图5-1 不好的三维Julia集 (37)

IV

四元数Julia分形及其Java编程

前言

长期以来,我们已经习惯了Euclid几何学中的各种图形,如线段、椭圆、双曲抛物面等等.然而大自然里的天然场景,如树木、群山、河流、湖泊等等,在Euclid 几何领域人们很难用数学语言精确的描述这些现象.

20世纪80年代,分形几何学诞生,它给漫长的数学发展史又浓浓的描上了灿烂的一页.加上现代计算机技术的应用,研究上述这些现象的都不再成为难事.分形几何的曲线和曲面具有多姿荆棘的圆盘,弯曲缠绕的螺线和细丝,挂着微细颗粒的鳞茎,无尽的斑斓色彩,意料外的精细结构,处处显示出分形的奇特之美.分形几何学的经典图形之一Mandelbrot集被人们作为分形学和混沌学的国际标志出现在许多国际性论文集和刊物的封面上,成为了世界巡回展出的计算机艺术珍品.这种由数学的内在美变成人们视觉上的美,简直令人匪夷所思.

分形几何诞生才不过20多年,但它对人类科学的影响是巨大的.卷入分形狂潮的除数学家和物理学家外,还有化学家、生物学家、地貌学和地震学家、材料科学家,甚至在社会科学和人文科学方面,大批哲学家、经济学家、金融学家乃至作家、画家和电影制作家都蜂拥而入.著名电影“星球大战”就是用分形技术创作的.分形图形学被认为描绘大自然景色最诱人的方法,谁不熟悉分形,就不能被认为他是科学上的文化人.

在分形几何中,许多重要的分形是由迭代产生的.因为迭代可以使一些看似简单的函数产生惊人的复杂性,Julia集就是其中一种.由于迭代函数的多样性,Julia 集可以在计算机图形工具的辅助下呈现为色彩斑斓、结构优美的分形图案,因此可广泛应用于纺织印染、广告设计、服装设计、装潢设计以及计算机美术教学等领域.可见,研究Julia集的生成算法具有重要的理论意义和实际价值.逃逸时间算法是生成Julia集的经典算法,它具有基本原理简单、绘图精度高、占用内存少等优点.

本软件利用计算机技术绘制Julia的分形图形,将四元数分形的内在美展现在人们眼前,同时也为进一步研究四元数分形随参数的变化提供了研究平台.很多文章中都提到了该算法,并给出其基本步骤,但却没有详细讨论该如何具体实现这些步骤,本文给出的绘制四元数Julia分形的基本步骤和具体实现.在附录中有本软件的源代码.

1

四元数Julia 分形及其Java 编程

2

第一章 早期数学怪物与分形几何

自从两千多年前希腊人Euclid(欧几里得)创立了几何学以来,人们对某个数学集合,总是习惯于在Euclid 空间(n R , Euclidean )对其研究和对其度量,其中字母n 表示该空间的维数,通常它是一个整数. 对有限个点,取0=n ; 一条线段或一条平面上的曲线, 取1=n ; 一个有限平面, 取2=n ; 对有限的空间几何体,则取

n 为3,同时也可分别得到它们的定常度量. 习惯上我们分别称它们为点的个数、线段的长度、平面图形的面积和立体的体积. 但在一个世纪以前,相继出现了一些被称之为数学怪物(Mathematical monsters)的东西,人们无法用传统的Euclid 几何语言去描述它们的局部和整体性质. 典型的数学怪物有以下几种.

1 Von Koch(冯.科克)曲线

自从有了函数曲线的连续与可微性质及其关系以后,是否存在一个处处连续而

点点不可微的函数曲线成了研究的热门. 首先解决这个问题的是大数学家Weierstrass ,他于1872年设计了如下一个函数[1]

∑∞

==0)2cos()(k k k x b a x W π (1.1)

图1.1为)(x W 在3,5.0==b a 时图像[1].

图1-1冯.科克曲线

其中b a <<<10,且1≥ab (见图1.1),Weierstrass 证明了对某些a 和b 的值,该函数无处可微. 1916年,Hardy 证明了对满足上列条件的所有a 和b 的值,)(x W 都是无处可微的.

四元数Julia 分形及其Java 编程

3

)(x W 的缺点是极难绘画,故不够直观.到1904年,瑞典数学家von Koch 设计

了一条被称之为Koch 曲线的图形,其设计步骤如下:设0E 为单位区间[]1,0,第一步,即1=n ,以0E 的中间三分之一线段为底,向上作一个等边三角形,然后去掉

区间??

?

??32,31,得一条四折线段的多边形1E . 0E 是处处可微的,但1E 却有三点不可

微. 第二步,即2=n ,对1E 的四条折线段重复上述过程,得一条十六折线段多边形2E ,它有15个不可微点.再重复上述过程,由n E 到1+n E ,当n 趋于无穷时,便得一条Koch 曲线,显然它是一条处处连续但是点点不可微的曲线[1]

.

图1-2 Koch 曲线

下面我们看看Koch 曲线在(1R ,Euclidean )中的长度是多少[1].显然,

1)length(0=E , 3

4)length(1=

E , ∞====

∞→∞→n n n n E length E length E length )34

(lim ))((lim )(,9

16)(2

下面看看Koch 曲线的面积是多少[1]:

先用一个三角形覆盖全部曲线, 由底长1, 高为

63, 故该三角形面积为12

3

.

四元数Julia 分形及其Java 编程

4

接着对曲线的四小部分用四个三角形覆盖, 由于每边长度均为原三角形边长的三分之一,全部三角形面积为

9

4

123?. 又以边长再缩短31的16个小三角形去覆盖曲线的

16个小部分, 全部面积应该是n

???

???94123.照次类推得von Koch 曲线的面积为

094123lim =???

???=∞→n

n S .

这样一来, von Koch 曲线在1维Euclid 空间的度量为∞,在(2R ,Euclidean )中,其面积为零. 换言之,Koch 曲线在传统的Euclid 几何领域不可度量.

2 Sierpinski(希尔宾斯基)三角形

由波兰数学家Sierpinski 命名的三角形,又称Sierpinski 筛,Sierpinski 垫片等等.令0S 为边长为1的等边三角形,第一步(1=n ),连结三条边的中点,得到四个全等三角形,去掉中间一个,保留其余三个,得1S .第二步(2=n ),对1S 的三个三角形重复刚才步骤,得2S ,它含有9个小三角形.如此重复上述步骤,得n S ,当∞→n 时,便得Sierpinski 三角形(见图1.3). 我们也来看看集合S 在(1R ,Euclidean )中的长度是多少.由于在∞→n 时,原先的黑色三角形变成了无穷个小

点点,故每个小点的边缘长度之和∞=???

???=∞

→n

n S length 233lim )(.在(2R ,Euclidean )

中,0S 面积为

4

3

,以后每一步都是分4留3,所以Sierpinski 三角形的面积04343lim )(=???

???=∞→n

n S area ,同样地,在传统的Euclid 几何里,Sierpinski 三角

形不可度量[1].

图1-3 Sierpinski 三角形

四元数Julia 分形及其Java 编程

5

3 Cantor(康托)集

记[]1,00=E ,第一步(1=n ),去掉中间三分之一,得???

?????????=1,3231,01 E .第二

步(2=n ),重复刚才步骤,得??

?

?????????????????????=1,9897,3231,9291,02 E .如此重复刚才

一系列步骤,得n E ,当∞→n 时,得Cantor 集E (见图1.5) [1]

.

图1-4 Cantor 三分集

显然,Cantor 集有无数个点组成,在零维空间,其度量为无穷大.在一维空间,

当其在第n 步时,共有n

2个小区间,每个区间长度为n

??

?

??31,所以

032lim )(=??

? ??=∞→n

n E length [1]

.

要么为无穷大,要么为零,Cantor 集在Euclid 几何领域里也不可度量. 上述的三个怪物都是数学家的创造物,然而在自然界,同样有不可思议的现象存在.气象学家Richardson(理查森)(1881~1953) 在测量英国西海岸长度时,发现了一个规律:绘制地图的比例尺由大变小时,如由cm 1代表km 100减小到cm 1代表

km 1时,海岸线长度却变得越来越长了.令a 为比例尺度(为1000,1000000等),S

为海岸线长度,1S 为1000=a 时的长度,则英国西海岸长度S 的对数[1]

a S S log 22.0log log 1-= (1.2)

22

.011?

?

?

??=a S S . (1.3)

四元数Julia 分形及其Java 编程

6

这意味着,当a 减小到其

23

1

时,S 将增大一倍.按这个公式,海岸线长度实际上是不确定的.也就是说,自然界的某些现象(实际上是许许多多现象)是不能用Euclid 几何来描述的.

4 Mandelbrot 和他的分形几何

上述这些困惑数学家许多年的怪现象,终于在20世纪70年代被美国数学家 B.Mandelbrot(曼德勃罗)彻底解决.在上面的叙述中,我们始终在Euclid 几何的整数维空间中讨论,那么为什么不允许有非整数维的几何存在呢[1]?实际上,若对长度为1的线段n 等分,每段线长为r ,则

1=?r n (1.4)

对面积为1的正方形作n 等分,每个小正方形的边长为r ,则

12=?r n (1.5)

对体积为1的正方体作n 等分,每个小正方体的边长为r ,则

13=?r n (1.6)

图1-5 几何体与维数

上面三个等式中,r 的幂次实际上就是该几何体能得到定常度量的空间维数,于是我们有如下公式

1=?D r n

两边取对数,我们得到空间维数D 的表达式:

四元数Julia 分形及其Java 编程

7

r

n

D ln ln -

= (1.7) 对Koch 曲线而言,在第n 步时,其等长折线段总数为n

4,每段长度为n

???

??31,于

是Koch 曲线的维数D 应为

26186.13

ln 4

ln 31ln 4ln ≈=

??

? ??-

=n

n D . 对Sierpinski 三角形,在第n 步时,所有全等三角形的边数为13+n 个,每边长度

为n

??

?

??21,所以Sierpinski 三角形的维数为 58496.12

ln 3ln ≈=D .

对于Cantor 集,在第n 步时,原先的单位线段被分成了等长的n 2段,每段长度

为n

??

?

??31,故其维数 63093.03

ln 2

ln ≈=

D . Mandelbrot 在对这些数学怪物及许多物理现象进行研究后,终于创立了这门重要学科——分形几何(Fractal Geometry ).应该说,到目前还未有严格的定义.我们不妨引用K.Falconner 对分形集合F 的描述:

1)F 具有精细的结构,即是说在任意小的尺度之下,它总有复杂的细节; 2)F 是如此地不规则,以至它的整体和局部都不能用传统的几何语言来描述; 3)F 通常具有某种自相似性,这种自相似性可以是近似的,也可能是统计意义

上的;

4)F 在某种意义下的分形维数通常都大于它的拓扑维数;

5)在多数令人感兴趣的情形下,F 以非常简单的方法定义,可以用递归过程产生.

四元数Julia 分形及其Java 编程

8

第二章 Mandelbrot 集与Julia 集

1 Mandelbrot 集

1980年, Mandelbrot 给世人提供了一幅无与伦比的杰作: Mandelbrot 集.其创作过程如下:

令c z z f +=2)(, 其中C c z ∈,,z 是复变量,c 是复常数.对变换f 施行逃逸时间法, 得到如下迭代公式[1]:

pq n n c z z +=+2

1 (2.1)

式中)0,0(0=z ,pq c 为计算机荧屏位于),(q p 位置的象素. 于是(2.1)式成了

pq pq pq pq pq n c c c c c z z ++++++=+222222

01)))))((((( (2.2)

给定N 为一个正整数, 比如等于255. 当象素位于),(q p 且N n =时,n z 仍然小于预设的一个阈值K , 则在),(q p 位置着色为1(蓝色), 否则当N n <时, 已有

K z n ≥, 则在),(q p 位置描色为n . 如此),(q p 遍历整个荧屏后, 便画出了一幅Mandelbrot 集. 该集合的坐标如图2-1所示.

图2-1 Mandelbrot 集的坐标图

四元数Julia 分形及其Java 编程

9

为什么说Mandelbrot 集是分形呢? 实在是它的层层嵌套中有很多很多的自相似部分.部分经逐级放大后, 又出现了一个Mandelbrot 湖.

经典的M-集是由映射c z +2得来, 人们自然会采用更多的函数, 从而得到各种各样的M-集, 又称广义M-集.

c z z n n +=+cos 1;

c e z z c n n ++=+)arcsin(2

1; c c z z n n ++=+)cosh arctan(81.

2 Julia 集

Gaston Julia(1893-1978),法国数学家.1919年,他在第一次世界大战时受

了伤,住院期间他潜心研究了迭代保角变换c z z n n +=+2

1. 这种复平面上的变换能生

出一系列令人眼花缭乱的图形变化. 当时没有电子计算机,不能象现在那样把如此美妙绝论的图案奉献于世. 因此他的工作并不为世人重视.

虽然产生Julia 集和Mandelbrot 集的变换都是[1]

3,2,1,0,

2

1=+=+n c z z n n (2.3)

但这里的常数c 却是任意复数, 变元0z 是计算机荧屏上的每个象素. 当0z 遍历象素),(q p 的所有点且对公式(2.3)运用逃逸时间法后, 便得到一幅Julia 集c J 了.令1.1=c , 便得到 图2.19

图2-2 Julia 集(c=1.1)

由于Mandelbrot 集(有时简称其为M-集)和Julia 集都源于同一个变换, 因此它们之间必定有非常复杂的关系. 由于每一个常数 c 都对应一个c J , 而M-集上的每个点都是一个c , 所以M-集合的所有点就对应着数以万计的c J . 图2-3正显示了

四元数Julia 分形及其Java 编程

10

它们两者之间的这种关系. 看得出, 相近的c 值, 对应的c J 也就较为相似.

图2-3 Mandelbrot 集和Julia 集

从图2.20可以看出, 凡是M-集的边界点, 其对应的c J 就显有分枝状. 这里面有太多的奥妙.

由于一幅Julia 集完全依赖于常数c , 所以我们常常把它简记为c J

.

图2-4 c 不同的Julia 集

与M-集一样, Julia 集也有其广义集. 图2.24的四幅图分别对应于函数:

1. )sin(cos sin 2z z c z =

2. )cos(πz c z ?=

3. πc z z z +?=cos )log(cosh

4. πc z z z +?=cos )tanh(cos

.

四元数Julia 分形及其Java 编程

11

第三章 四元数分形与四元数Mandelbrot 集和Julia 集

1 四元数基本理论

我们都熟悉平面上复数z , 其中bi a z +=, 而1-=i . 无疑, 十八世纪以前创立的复数是数学史上的一件大事. 那末是否有高维的复数呢? 所谓的超复数(hypercomplex 或supercomplex)是这样定义的:

令ck bj ai w z +++=, 其中i 和k j ,都是虚数, 它们满足下述运算要求[2]:

1

1=-====-=-==-=-==ijk kk jj ii j ik i kj k ji j ki i jk k ij

看得出, 它们的乘法满足交换律.

两个超复数的乘法公式是:

令 k z j y i x w h 11111+++=和k z j y i x w h 22222+++=.则[2]

+

---=)(2121212121z z y y x x w w h h +

--+i z y y z x w w x )(21212121 +-+-j z x y w x z w y )(21212121 k

z w y x x y w z )(21212121+++

其它运算法则就不再赘述.

1843年, 爱尔兰数学家William R. Hamilton(哈密尔顿)发明了四元数(quaternion). 一个四元数q 的定义是这样的:

zk yj xi w q +++= (3.1)

其中z y x w ,,,是实数,k j i ,,是虚数, 且有

1222-====ijk k j i (3.2)

q 的模

2222z y x w q +++=. (3.3)

一个四元数Q 可以由平面上的两个复数v u ,来表示:

?

?

?

???-+-++=??????-=bi a di c di c bi a u v v u Q (3.4) 其中d c b a ,,,是实数.v u ,分别是复数v u ,的共轭.

一个四元数也能用

四元数Julia 分形及其Java 编程

12

[]w z y x q ,,,= (3.5)

来表示.

一个平面上的复数由实部和虚部构成: bi a z +?=1, 一个四元数Q 同样也能由若干部分线性组合而成[2]:

zK yJ xI wU Q +++= (3.6)

其中

??????≡1001U (3.7) ??????-≡i i I 00 (3.8) ??????-≡0110J (3.9) ??

????≡00i i K (3.10) 于是

U K J I -===222 (3.11)

也就是说,K J I ,,是矩阵方程 U X -=2的解, 是负单位矩阵的平方根.

一个四元数整系数基的线性组合也叫Hamilton 整数. 在4R 空间, 四元数的基是如下四个:

?????

???????=10

000010001000011 (3.12) ?????

???????--=01

00100000010010i (3.13) ?

?

???

???????--=0001

001001001000j (3.14)

四元数Julia 分形及其Java 编程

13

?????

??

??

???--=00

10000110000100k (3.15) 与超复数不同, 四元数的三个虚数之间的运算并不遵从乘法交换律, 其运算规

则如下:

k ji ij =-= (3.16) i kj j =-= (3.17) j ik ki =-= (3.18)

看起来很象三维空间直角坐标系中三个单位向量k j i ,,的叉乘关系.

设 zk yj xi w q +++=, 则其四元共轭为

zk yj xi w q ---=.

其加法遵从一般规律[2]:

k z z j y y i x x w w q q )()()()(2121212121+++++++=+.

设],,,[],,,,[22221111z y x w q z y x w p ==, 其乘法服从[2]

)(21212121z z y y x x w w pq ---= i y z z y w x x w )(21212121-+++ j x z w y z x y w )(21212121++-+ k

w z x y y x z w )(21212121+-++

q 的模仍然遵从一般复数关系[2]

.)(q q q q q norm == (3.19)

且等于公式(3.3).

一个四元数可以写成一个数量加上一个向量

).,(v w q

=

其中向量 [,,]v x y z =

. 如此一来, 两个四元数的乘法就变得较为简单[2]:

),(),(221121v w v w q q

?=

),(2112212121v v v w v w v v w w

?++?-=

四元数的除法也遵从复数关系

q

q q

p q p p p p p ==

-和1 从几何上来讲, 四元数代表着时间加三维空间. 如果固定实数w 为常数, 则这个四元数就是三维空间的一个变量.

四元数Julia 分形及其Java 编程

14

0)(lim

=→q

q f q

2 四元数Mandelbrot 集和Julia 集

记q 和c 为四元数, 按第二章中Mandelbrot 集的迭代法[2]

,2,1,0,

2

1=+=+n c q q n n (3.20)

就得到一幅3维四元数(把实数w 看作常数, 并认定其为第四维)Mandelbrot 集了.

四元数Julia 集是4维空间中的Julia 集,同样使用公式[2]

,2,1,0,

2

1=+=+n c q q n n

其中),2,1,0( =n q n 和c 都是四元数. 生成四元数Julia 集的方法与普通复数情况类似,只需迭代公式(3.20), 只是c 是一个固定的四元数而已. 迭代时要观察

||n q 的敛散情况.

把第四维看作时间,可以认为我们生成的是一个三维动画片. 实际操作时, 一般取第四维为常数,这样我们得到的是静止的三维图像. 程序主体结构与二维情况也类似,我们用多重循环扫描一个三维立方体内部所有的点,就知道该点是否属于Julia 集了. 做法如下: 对每一个y

对每一个 x 对每一个z

作迭代

,2,1,0,

21=+=+n c q q n n

其中],,,0[n n n n z y x q =. 当M n =时, n q 仍属于集合的话就退出这一层循环

我们并不计算z 轴方向上的所有点,那样速度太慢. 对于给定的一组),(y x ,只要沿z 轴方向找到第一个属于Julia 集合的点就够了, 其它的点被挡住,让看不见. 这样,就大大提高程序的运行速度. 也有广义的四元数Julia 集. 不过由于以四元数为自变量的函数计算过于困难, 目前还仅仅处理q 的多项式.

四元数Julia 分形及其Java 编程

15

第四章 分形软件设计

本软件采用Java 语言实现,Java 语言具有跨平台的特性,可在多个操作平台

上运行,使用程序能在多个平台运行.Java 是面向对象的程序设计语言,因此在软件设计时应该采用面向对象的程序设计方法,由于本软件的规模较小,所要实现的功能明确等特点,因此采用UML 对软件进行建模.一方面本软件的全部代码由我一人写,不存在与其他人员的交流问题;另一方面,用例较少、每个用例的描述脚本(一般用活动图)简单;加之写本软件的时间所限,所以在设计时只设计了用例图和类图.

由于二维和三维的Mandelbrot 集和Julia 集都是由迭代函数c z z +=2产生的,不同的是绘制图形时c 是一个复数,绘制三维图形是c 是一个四元数,所以它们之间有很多共性.不论是复数还是四元数,它们都都加、减、乘、除,所以我们先抽象出一个Number 接口类,再分别建立Complex 类和FourNumber 类,在迭代方法只要实现对接口Number 迭代,就可以分别应用于对复数类Complex 和四元数FourNumber 的迭代.Mandelbrot 集和Julia 集虽都是由迭代函数c z z +=2产生,但

z 和c 的具体含意不一样,Mandelbrot 集中的0z 是0点, c 是迭代点的坐标,而在Julia 集中0z 是迭代点的坐标,c 是事先给定的一个常量,基于这些特点,利用面向对象的继承机制可以先把它们的共性提取出来,建立一个基类InteratorFractal ,由于InteratorFractal 并不是一个实际的东西,而是抽象出来,所以用建立成接口类更合理.因为在Java 中实现接口的类必须实现接口中全部方法,然而实际中只很少量的不同,为了避免的每个类中都要写大量的代码,所以先建立的适配器InteratorFractalAdatper 类,用于实现它们的共同特性,子类子实现自己特有的部分即可,在InteratorFractalAdatper 类中提供一个抽象方法drawImagePoint(),用于绘制指定的点,子类中只用实现用来实现drawImagePoint()方法.

1 用例图

用例图(Use Case diagram)在UML 中是非常独特的图形元素,它描述人们希望

如何使用一个系统.用例图告诉我们谁是相关的用户,他们系统提供什么服务,以及他们需要为系统提供的服务.

用例图是面向对象软件工程(OOSE)的关键元素,面向对象的方法也被称为

分形(一种别样的数学美丽)

分形(一种别样的数学美丽) 从海螺和螺旋星云到人类的肺脏结构,我们身边充满各种各样的混沌图案。分形(一种几何形状,被以越来越小的比例反复折叠而产生不能被标准几何所定义的不标准的形状和表面)是由混沌方程组成,它包含通过放大会变的越来越复杂的自相似图案。要是把一个分形图案分成几小部分,结果会得到一个尺寸缩小,但形状跟整个图案一模一样的复制品。 分形的数学之美,是利用相对简单的等式形成无限复杂的图案。它通过多次重复分形生成等式,形成美丽的图案。我们已经在我们的地球上搜集到一些这方的天然实例,下面就让我看一看。 1.罗马花椰菜:拥有黄金螺旋 罗马花椰菜 这种花椰菜的变种是最重要的分形蔬菜。它的图案是斐波纳契数列,或称黄金螺旋型(一种对数螺旋,小花以花球中心为对称轴,螺旋排列)的天然代表。 2.世界最大盐沼——天空之镜

盐沼

坚硬的盐层上呈现非常一致的不规则图案 过去一个世纪,上图里的旧金山海湾盐沼一直被用来进行工业盐生产。下图显示的是位于玻利维亚南部的世界最大盐沼——天空之镜(Salar de Uyuni)。坚硬的盐层上呈现非常一致的不规则图案,这是典型的分形。 3.菊石缝线 菊石的外壳还生长成一个对数螺旋型

大约6500万年前灭绝的菊石 在大约6500万年前灭绝的菊石,是制作分成许多间隔的螺旋形外壳的海洋头足纲动物。这些间隔之间的壳壁被称作缝线,它是分形复曲线。美国著名古生物学家史蒂芬·杰伊·古尔德依据不同时期的菊石缝线的复杂性得出结论说,进化并没驱使它们变得更加复杂,我们人类显然是“一个例外”,是宇宙里独一无二的。菊石的外壳还生长成一个对数螺旋型,很显然,自然界经常会出现这种图案,例如罗马花椰菜。 4.山脉 山脉 山脉是构造作用力和侵蚀作用的共同产物,构造作用力促使地壳隆起,侵蚀作用导致一些地壳下陷。这些因素共同作用的产物,是一个分形。上图显示的是喜马拉雅山脉,它

各种有趣的分形

各种有趣得分形 我们瞧到正方形,圆,球等物体时,不仅头脑里会迅速反映出它就是什么,同时,只要我们有足够得数学知识,我们头脑中也反映出它得数学概念,如正方形就是每边长度相等得四边形,圆就是平面上与某一点距离相等得点得集合,等等。 但就是,当我们瞧到一个山得形状时,我们会想到什么?”这就是山”,没错,山就是如此得不同于其她景象,以至于您如果绘画水平不高,根本画不出象山得东西。可就是,山到底就是什么?它既不就是三角形,也不就是球,我们甚至不能说明山具有怎样得几何轮廓,但为什么我们却有如此直观而又强烈得山得印象?分形得创始人就是曼德布洛特思考了这个问 图中得风景图片又就是说明分形得另 一很好得例子。这张美丽得图片就是利 用分形技术生成得。在生成自然真实得 景物中,分形具有独特得优势,因为分形 可以很好地构建自然景物得模型、 这就是一棵厥类植物,仔细观察,您会发 现,它得每个枝杈都在外形上与整体相 同,仅仅在尺寸上小了一些。而枝杈得 枝杈也与整体相同,只就是变得更加小 了。 Sierpinski三角形具有严格得自相似 特性

Kohn雪花具有严格得自相似特性 分维及分形得定义 分维概念得提出 对于欧几里得几何所描述得整形来说,可以由长度、面积、体积来测度。但用这种办法对分形得层层细节做出测定就是不可能得、曼德尔布罗特放弃了这些测定而转向了维数概念、分形得主要几何特征就是关于它得结构得不规则性与复杂性,主要特征量应该就是关于它得不规则性与复杂性程度得度量,这可用“维数”来表征。维数就是几何形体得一种重要性质,有其丰富得内涵、整形几何学描述得都就是有整数维得对象:点就是零维得,线就是一维得,面就是二维得,体就是三维得。这种几何对象即使做拉伸、压缩、折叠、扭曲等变换,它们得维数也就是不变得;这种维数称为“拓扑维”,记为d。例如当把一张地图卷成筒,它仍然就是一个二维信息载体;一根绳子团成团,仍然就是一维结构。但曼德尔布罗特认为,在分形世界里,维数却不一定就是整数得。特别就是由于分形几何对象更为不规则,更为粗糙,更为破碎,所以它得分数维(简称“分维”,记为D)不小于它得拓扑维,即D≥d。 维数与测量有密切关系、如为了测一平面图形得面积,就要用一个边长为l、面积为l2得标准面元去覆盖它,所得得数目就就是所测得面积。如果用长度l去测面积,就会得到无穷大;而如果用l3去测这块面

各种有趣的分形

各种有趣的分形 我们看到正方形,圆,球等物体时,不仅头脑里会迅速反映出它是什么,同时,只要我们有足够的数学知识,我们头脑中也反映出它的数学概念,如正方形是每边长度相等的四边形,圆是平面上与某一点距离相等的点的集合,等等。 但是,当我们看到一个山的形状时,我们会想到什么?"这是山",没错,山是如此的不同于其他景象,以至于你如果绘画水平不高,根本画不出象山的东西。可是,山到底是什么?它既不是三角形,也不是球,我们甚至不能说明山具有怎样的几何轮廓,但为什么我们却有如此直观而又强烈的山的印象?分形的创始人是曼德布洛特思考了这个问题。让 图中的风景图片又是说明分形的另一 很好的例子。这张美丽的图片是利用分 形技术生成的。在生成自然真实的景物 中,分形具有独特的优势,因为分形可 以很好地构建自然景物的模型。 这是一棵厥类植物,仔细观察,你会发 现,它的每个枝杈都在外形上和整体相 同,仅仅在尺寸上小了一些。而枝杈的 枝杈也和整体相同,只是变得更加小 了。 Sierpinski三角形具有严格的自相似特 性

Kohn雪花具有严格的自相似特性 分维及分形的定义 分维概念的提出 对于欧几里得几何所描述的整形来说,可以由长度、面积、体积来测度。但用这种办法对分形的层层细节做出测定是不可能的。曼德尔布罗特放弃了这些测定而转向了维数概念。分形的主要几何特征是关于它的结构的不规则性和复杂性,主要特征量应该是关于它的不规则性和复杂性程度的度量,这可用“维数”来表征。维数是几何形体的一种重要性质,有其丰富的内涵。整形几何学描述的都是有整数维的对象:点是零维的,线是一维的,面是二维的,体是三维的。这种几何对象即使做拉伸、压缩、折叠、扭曲等变换,它们的维数也是不变的;这种维数称

分形图及其函数

Mandelbrot 集的定义方法在复平面中,迭代表达式为 21k k Z Z C +=+ (1) 式中Z 和C 都是复数,由各自的实部和虚部组成。分离Z 和C 的实部和虚部,则: Z x yi =+ C p qi =+ 式中:x p 、为复数的实部;y q 、为复数的虚部;i 为虚常数,i =。第k 个点k Z ,即xy 平面上的点(,)k k x y ,从k Z 到1k Z +的迭代过程就是 221k k k x x x y p +==-+ (实部) 12k k k y y x y q +==+ (虚部) 令初始值Z0 = 0 ( 即Z0 = 0 + 0·i ) ,C ≠0 ( 其中 p 和q 在各步迭代中都保持为常数)。迭代计算中,把前一个Z 值的输出作为下一个Z 值的输入,代入 Zk ← Z2k + C 反复运算,得到一连串的复数。每做一次迭代,新的复数就离开前一个复数一段距离,就如同一个点在复平面上跳舞。由系统生成的M 集的图形见图1 函数:21k k Z Z C +=+其中Z x yi =+,C p qi =+(这里221k k k x x x y p +==-+ 12k k k y y x y q +==+ ) 对于k > 2 的广义Mandelbrot 集即高次幂Mandelbrot 集,其集图像更为丰富[10]。图2 示出3 阶M 集到10 阶M 集的图形。

1、函数变换: 1) 改变迭代式21k k Z Z C +=+中x 与y 的位置。把原来从k Z 到1k Z +的迭代过程式中的2k x 和2k y 改变位置,则转换成: 221k k k x x y x p +==-+ (实部)

分形实例的赏析

分形实例的赏析 分形实例的赏析 分形最主要的性质是本来看来十分复杂的事物,事实上大多数均可用仅含很少参数的简单公式来描述。其实在简单中蕴含着复杂。分形几何的迭代法为我们提供了认识简单与复杂的辩证关系的生动例子。世界是非线性的,分形无处不在,分形具有局部与整体的自相似性。复杂的分形图不能用传统的数学方法描述,但却能用简单的迭代法生成。可以应用迭代函数生成诸如植物、丛林、山川、云烟等复杂的自然景物。“分形艺术”是纯数学的产物,创作者不仅要有很深的数学功底,还要有熟练的编程技能。电子计算机图形推开了分形几何学的大门,当我们踏入这个新的几何世界时,扑面而来的分形图像琳琅满目、美不胜收,令人流连忘返。美,是分形给每一个观赏者带来的第一印象。(1)分形的标志——芒德勃罗集 芒德勃罗集(简称M集)是号称“分形几何之父”的芒德勃罗于1980年发现的。它被公认为迄今为止发现的最复杂的形状,是人类有史以来最奇异最瑰丽的几何图形。它是由一个主要的心形图与一系列大小不一的圆盘“芽苞”突起连在一起构成的。由其局部放大图可看出,有的地方像日冕,

有的地方像燃烧的火焰,那心形圆盘上饰以多姿多彩的荆棘,上面挂着鳞茎状下垂的微小颗粒,仿佛是葡萄藤上熟透的累累硕果,它的每一个局部都可以演绎出美丽的梦幻般仙境的图案(图7—1—3、图7—1—4)。它们像漩涡、海马、发芽的仙人掌、繁星、斑点乃至宇宙的闪电……因为不管你把它的局部放大多少倍,都能显示出更加复杂更令人赏心悦目的新的局部,这些局部既与整体不同,又有某种相似的地方,好像梦幻般的图案具有无穷无尽的细节和自相似性。而这种放大可以无限地进行下去,使你感到这座具有无穷层次结构的雄伟建筑的每一个角落都存在着无限嵌套的迷宫和回廊,催生起你无穷探究的欲望。难怪芒德勃罗自己称M集为“魔鬼的聚合物”。 图7—1—3 M集的局部放大 图7—1—4 M集的多局部放大 (2)走进朱利亚集

相关文档