欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

指尖上的艺术——分形

程序员文章站 2022-05-19 17:49:47
...

 先来给大家看两张分形的图片,
指尖上的艺术——分形
            
    
    博客分类: Java基础 分形迭代L-System
 
指尖上的艺术——分形
            
    
    博客分类: Java基础 分形迭代L-System
 (这两张照片由李智文,琚俊提供)

怎么样,很美观吧,这就是分形,许多人第一次听到这个词时都不懂什么意思,我们就先来介绍一下分形的意思吧,所谓概念,无非就是从许多相似的东西中抽离出来的共同点,我们一起来看看下面这个典型的分形,
指尖上的艺术——分形
            
    
    博客分类: Java基础 分形迭代L-System
 

我们可以看出这些图片的局部和整体都有相似的结构,于是我们便可以得出分形的概念:部分与整体以某种形式相似的形,称为分形,有个词很清晰地表达出这个观念,那就是“自相似性”。不要以为分形是什么遥不可及的东西,生活中也有很多分形的事例,比如说树,西兰花,山脉,孔雀的尾巴等等。
指尖上的艺术——分形
            
    
    博客分类: Java基础 分形迭代L-System
 

据曼德勃罗教授自己说fractal(分形)一词是1975年夏天的一个寂静夜晚他在冥思苦想之余偶翻他儿子的拉丁文字典时突然想到的。

曼德勃罗曾经为分形下过两个定义

  1满足下式条件

  Dim(A)>dim(A)

  的集合A称为分形集。其中Dim(A)为集合AHausdoff维数或分维数dim(A)为其拓扑维数。一般说来Dim(A)不是整数而是分数。

2部分与整体以某种形式相似的形称为分形。

最著名的分形莫过于科赫曲线了,如图所示,循环很多次后便会有意想不到的效果。
指尖上的艺术——分形
            
    
    博客分类: Java基础 分形迭代L-System
 

那么我们用java怎么实现分形呢?

在此只介绍两种方法:

1.       迭代

迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。这是网上的定义,其实只要给出个例子大家应该很容易就理解了。

Xn+1=sin(a*Yn)-cos(b*Xn)

Yn+1=sin(c*Xn)-cos(d*Yn)

每一次循环后的x的值都和原来的x的值有关,吧每一次循环后的点画出来就是本篇博文的第一张图片,怎么样,漂亮吧!

有很多的迭代方程可以画出很多美妙的图形,大家可以试试哦。

2.L-System

   对于L-System来说,有三个基本的字符,F+-F表示画一条线段,+-表示转过的角度,比如我们规定初始方向为x轴正方向,+-分别表示顺时针旋转60度,逆时针旋转60度。那么F-F++F-F就是科赫曲线图中的第一张图,先按x轴正方向画一条线段,然后逆时针转向60度,再画一条线段,然后顺时针转向120度,再画一条线段,然后逆时针旋转60度,再画一条线段。

对于L-System来说要有两个基本的要素,母串和演变规则。比如说刚刚的F-F++F-F就是科赫曲线的母串,线条所有的变换都是以这个母串为基本进行的。

而演变规则就是,每一次要把线段变成什么样子,有一个基本的规则,比如说科赫曲线演变规则就是F=F-F++F-F

就这样我们有了母串,然后有了演变规则,然后可以将母串中的F进行替换,循环很多次后得到了新的串F-F++F-F-F-F++F-FF-F++F-F。。。。。。然后我们把它画出来就好了。

 

 

感觉编程就和弹钢琴一样,朗朗可以在琴键上敲击出曼妙动听的音乐,我们可以在键盘敲击出美轮美奂的图形,这就是一种艺术,指尖上的艺术。

  

 

 注:分形,迭代定义来自于360百科

 

  • 指尖上的艺术——分形
            
    
    博客分类: Java基础 分形迭代L-System
  • 大小: 82.5 KB
  • 指尖上的艺术——分形
            
    
    博客分类: Java基础 分形迭代L-System
  • 大小: 38.9 KB
  • 指尖上的艺术——分形
            
    
    博客分类: Java基础 分形迭代L-System
  • 大小: 87.1 KB
  • 指尖上的艺术——分形
            
    
    博客分类: Java基础 分形迭代L-System
  • 大小: 8.6 KB
  • 指尖上的艺术——分形
            
    
    博客分类: Java基础 分形迭代L-System
  • 大小: 8 KB