分形的程序实现

近一段时间一直在研究分形,写了几个分形相关的程序,这是其中一个。程序中里面包含近20种分形图形的生成算法。

(1)科赫(Koch)雪花

(2)列维(levy)曲线

(3)龙形曲线(Dragon Curve)

(4)C折线

(5)谢尔宾斯基(Sierpinski)三角形

(6)谢尔宾斯基(Sierpinski)地毯

(7)谢尔宾斯基(Sierpinski)四面体

(8)拆分三角形

(9)分形树(Tree)

(10)分形二叉树(Binary Tree)

(11)希尔伯特-皮亚诺(Hilbert-Peano)曲线

(12)皇冠(Crown)曲线

(13)花篮(Flower Basket)曲线

(14)正方形折线

(15)闵可夫斯基(Minkowski)曲线

(16)海岸线

(17)康托(Cantor)三分集

程序中的图形颜色是白色,背景色为黑色,使用最基本的黑与白以表现分形图形。

软件下载地址:http://files.cnblogs.com/WhyEngine/Fractal.7z

软件使用说明:

  • 键盘0~9,分别设置第0级到第9级分形。
  • 这是个3D程序,键盘O用于2D视角与3D视角的切换。
  • 鼠标右键的拖动可以改变视角。
  • 键盘X用于恢复为默认视角。
  • 键盘F11用于全屏切换。

最后转帖一篇关于分形介绍的文章:原址:http://sxyd.sdut.edu.cn/gushi/gushi2.htm

分形----自然几何

一、欧氏几何的局限性
      自公元3世纪欧氏几何基本形成至今已有2000多年,尽管此间从数学的内在发展过程中产生了射影几何、微分几何等多种几何学,但与其他几何学相比,人们在生产、实践及科学研究中更多涉及到的是欧氏几何。欧氏几何的重要性可以从人类的文明史中得到证明。欧氏几何主要是基于中小尺度上的点、线、面之间的关系。这种观念与特定时期人类的实践、认识水平是相适应的。数学的发展历史告诉我们,有什么样的认识水平就有什么样的几何学。当人们全神贯注于机械运动时,头脑中的图象多是一些圆锥曲线、线段组合。受认识主、客体的限制,欧氏几何具有很强的“人为”特征。这样说并非要否定欧氏几何的辉煌历史,只是我们应当认识到欧氏几何是人们认识、把握客观世界的一种工具,但不是唯一的工具。
      进入20世纪以后,科学的发展极为迅速。特别是二战以后,大量的新理论、新技术以及新的研究领域不断涌现。同以往相比,人们对物质世界以及人类社会的看法有了很大的不同。其结果是,有些研究对象已经很难用欧氏几何来描述了。如对植物形态的描述,对晶体裂痕的研究,等等。
      美国数学家B.Mandelbrot曾提出这样一个著名的问题:英格兰的海岸线到底有多长?这个问题在数学上可以理解为:用折线段拟和任意不规则的连续曲线是否一定有效?这个问题的提出实际上是对以欧氏几何为核心的传统几何的挑战。此外,在湍流的研究、自然画面的描述等方面的描述等方面,人们发现传统几何依然是无能为力的。人类认识领域的开拓呼唤产生一种新的、能够更好地描述自然图形的几何学。在此,不妨称其为自然几何。
二、分形的产生
      一些数学家在深入研究实、复分析过程中讨论了一类很特殊的集合(图形),如Cantor集、Peano曲线、Koch曲线等。这些在连续观念下的“病态”集合往往是以反例的形式出现在不同的场合。当时它们多被用于讨论定理条件的强弱性,其更深一层意义并没有被大多数人所认识。
      1975年Mandelbrot在其《自然界中的分形几何》一书中引入了分形fractal)这一概念。从字面意义上讲,fractal是碎块、碎片的意思。然而这并不能概括Mandelbrot的分形概念。尽管目前还没有一个让各方都满意的分形定义,但在数学上大家都认为分形有以下几个特点:
      (1)具有无限精细的结构;
      (2)比例自相似性;
      (3)一般它的分数维大于它的拓扑维数;
      (4)可以由非常简单的方法定义,并由递归、迭代产生等。
      (1)、(2)两项说明分形在结构上的内在规律性。自相似性是分形的灵魂,它使得分形的任何一个片段都包含了整个分形的信息。第(3)项说明了分形的复杂性。第(4)项说明了分形的生成机制。Koch曲线处处连续,但处处可导,其长度为无穷大,以欧氏几何的眼光来看,这种曲线是被打入另类的,从逼近过程中每一条曲线的形态可以看出四条性质的种种表现。以分形的观念来考察前面提到的“病态”的曲线,可以看出它们不过是各种分形。
      我们把传统几何的代表欧氏几何与以分形为研究对象的分形几何作一比较,可以得到这样的结论:欧氏几何是建立在公理之上的逻辑体系,其研究的是在旋转、平移、对称变换下各种不变的量,如角度、长度、面积、体积,其适用范围主要是人造的物体。而分形的历史只有20来年,它由递归、迭代生成,主要适用于自然界中形态复杂的物体。分形几何不再以分离的眼光看待分形中的点、线、面,而是把它看成一个整体。
三、自然几何观及其应用
      平面上决定一条直线或圆锥曲线只需数个条件。那么决定一片蕨叶需要多少条件?如果把蕨叶看成是由线段拼和而成,那么确定这片蕨叶的条件数相当可观。然而当人们以分形的眼光来看这片蕨叶时,可以把它认为是一个简单的迭代函数系统的结果,而确定该系统所需的条件数相比之下要少得多。这说明用待定的分形拟合蕨叶比用折线拟和蕨叶更为有效。
      分形观念的引入并非仅是一个描述手法上的改变,从根本上讲分形反映了自然界中某些规律性的东西。以植物为例,植物的生长是植物细胞按一定的遗传规律不断发育、分裂的过程。这种按规律分裂的过程可以近似地看作是递归、迭代过程,这与分形的产生极为相似。在此意义上,人们可以认为一种植物对应一个迭代函数系统。人们甚至可以通过改变该系统中的某些参数来模拟植物的变异过程。
      分形几何还被用于海岸线的描绘及海图制作、地震预报、图象编码理论、信号处理等领域,并在这些领域内取得了令人注目的成绩。作为多个学科的交叉,分形几何对以往欧氏几何不屑一顾(或说是无能为力)的“病态”曲线的全新解释是人类认识客体不断开拓的必然结果。当前,人们迫切需要一种能够更好地研究、描述各种复杂自然曲线的几何学。而分形几何恰好可以堪当此用。所以说,分形几何也就是自然几何,以分形或分形的组合的眼光来看待周围的物质世界就是自然几何观。

时间: 2024-11-17 00:33:59

分形的程序实现的相关文章

分形之可编辑折线

将一条线段变成若干条首尾相连的线段,然后对每一条新生成的线段重复此操作,最终会生成一幅很漂亮的图形.这就是折线的分形图形.之前我发过一篇文章:分形的程序实现,里面实现了近20种分形图形的生成算法.在这些分形算法中,大部分是针对折线的,即将一条线段不停得拆分出多条线段,如:列维(levy)曲线, 海岸线, 科赫(Koch)雪花等.而这篇文章将提供一个可以自由编辑的任意折线分形程序. 软件操作方法如下: 双击FractalLine.exe或FractalLineSP.exe都可以启动程序,其中:一个

关于维度

1.什么是维度. 其实这个话题是欧氏几何的一个延伸.我们称零维的点,一维的线,二维的面,三维的体,四维的时空.你要注意到,这里0,1,2,3,4都是整数.你有没有想过,到底什么是维度?有没有分数维?比如3.1415926维.讨论这个的数学分支被称为分形数学.事实上分形数学已经广泛应用于物理,化学,地质,金融,社会科学等的方方面面,甚至到艺术及时尚.那么什么叫分形,什么是维度?先从一组图看起. 图0: 大自然中分形结构的例子 这组图特点在于,每个图中,某一部分挑出来都跟整体有类似性:比如,每根树枝

HIT1946 希尔伯特分形曲线(dfs)

补第二次期末考的题--发现代码细节还需要加强啊--这样一道题一直犯小错误. 题目链接: http://acm.hit.edu.cn/hoj/problem/view?id=1946 题目描述: 希尔伯特分形曲线 Submitted : 53, Accepted : 16 数学家Hilbert曾发现一种十分奇特的曲线.一般的曲线是没有面积的,但他发现的这条曲线却能充满整个空间.Hilbert曲线是由不断的迭代过程形成的.如下图所示,最原始的曲线称为H1,由H1迭代形成H2,再由H2迭代形成H3..

混沌与分形

混沌与分形理论的关系密切,混沌中有时包容有分形,而分形中有时又孕育着混沌.分形更注重形态或几何特性,图形的描述.混沌偏重于数理的动力学及动力学与图形结合的多方位的描述和研究.分形则更看中有自相似性的系统.混沌涉及面似乎比分形更广,对所有的有序与无序,有序与有序现象都感兴趣.特别是混沌中的分叉,分支现象与分形关系最密切.分形可以是混沌研究中一种手段或方法.一般认为非线性,随机性,以及耗散性是出现分形结构的必要物理条件. 非线性是指运动方程中含有非线性项(迭代),状态演化(相空间轨迹)发生分支,是混

编程序常用英语单词

application 应用程式 应用.应用程序 application framework 应用程式框架.应用框架 应用程序框架 architecture 架构.系统架构 体系结构 argument 引数(传给函式的值).叁见 parameter 叁数.实质叁数.实叁.自变量 array 阵列 数组 arrow operator arrow(箭头)运算子 箭头操作符 assembly 装配件 assembly language 组合语言 汇编语言 assert(ion) 断言 assign 指

分形算法小记

模式替换的分形,通常都可以使用L系统表示,想那些雪花曲线之类的都是模式替换分形的.L系统是指一个字符序列,这个字符序列内的某些子序列可以按照规则替换为特定的序列(通常更长),序列中的不同字符有不同的含义.比如改变绘制方向和绘制一条线段等等. 通过L系统可以绘制出非常接近真实的植物来,当然也可以绘制出其他的曲线. package main import ( "github.com/hydra13142/paint" "image" "image/color&

程序员必须掌握的600个英语单词

application 应用程式 应用.应用程序 application framework 应用程式框架.应用框架 应用程序框架 architecture 架构.系统架构 体系结构 argument 引数(传给函式的值).叁见 parameter 叁数.实质叁数.实叁.自变量 array 阵列 数组 arrow operator arrow(箭头)运算子 箭头操作符 assembly 装配件 assembly language 组合语言 汇编语言 assert(ion) 断言 assign 指

一幅画<十六芒星盾>---程序员or艺术家

画上是一面含有16个尖角的铜盾,这是我用程序算法生成的图像中最震撼的一幅.图像生成出来后,我看了好久,一边看一边想我的人生转向问题:我是不是该离开苦逼又屌丝的程序界,混入高端大气上档次的艺术圈? 说要进入艺术圈,只是提升逼格的话.其实我真正想的是:“靠,这画这么漂亮,要是能换成钱就好了.”虽说艺术是无价的,可艺术家是有价的.程序可以创造无限的财富,但程序员通常分不到多少.艺术虽高雅,但人是生活在世俗中的.我想的一个法子是:在某宝上开个网店,买电子艺术画,只买我用程序算法生成的图像.我需要将图像生

如何做一个iOS分形App

如何做一个iOS分形App 原文链接 : 如何做一个iOS分形App 原文作者 : Silviu Pop 译文出自 : 开发技术前线 www.devtf.cn 译者 : alier1226 校对者: MrLoong 状态 : 完成 介绍 在这个教程中,我们会做一个可以渲染Mandelbrot Set的应用程序,我们可以缩放和平铺它来看分形那令人惊叹的复杂之美.最终的结果如下: 着色程序的代码 void main() { #define iterations 128 vec2 position =