当前位置:网站首页 > Java教程 > 正文

fractal java 教程



分形是自然界的几何学。----
-曼德勃罗(分形理论创始人)

通过本次学习,学到了如何制作分形树 并且被他深深吸引,最终,也能做出一些如下:

落花的凤凰树,落花的紫荆花树,樱花花瓣飘落的树与落花的蓝花楹树
在这里插入图片描述

任务

2.2 参考分形的概念,绘制分形树或者其他分形图形。要求可以对图形进行保存和打开等操作。

http://www.matrix67.com/blog/archives/6231

https://www.zhihu.com/question//answer/

思路

1.分形概念的提出与分形理论的建立

2.创建窗体

3.生成分形树

4.实现文件保存与打开 及Bitmap 类

5.分形树与其衍生出的其他分形图形 效果展示

1.分形概念的提出与分形理论的建立

分形的英文为 fractal,是由美籍法国数学家曼德勃罗(Benoit Mandelbrot)创造出来的,此词源于拉丁文形容词 fractus,对应的拉丁文动词是 frangere(破碎、产生无规则碎片),此外,此词与英文的 fraction(碎片、分数)及 fragment(碎片)具有相同的词根。在20世纪70年代中期以前,曼德勃罗一直使用英文 fractional一词来表示他的分形思想。因此,取拉丁词之头,撷英文之尾所合成的 fractal,本意是不规则的、破碎的、分数的。曼德勃罗是想用此词来描述自然界中传统欧氏几何学所不能描述的一大类复杂无规则的几何对象。例如,蜿蜒曲折的海岸线、起伏不定的山脉、粗糙不堪的断面、变幻无常的浮云、九曲回肠的河流、纵横交错的血脉、令人眼花缭乱的满天繁星等。它们的共同特点是极不规则或极不光滑。直观而粗略地说,这些对象都是分形。

1975年,曼德勃罗出版了他的法文专著《分形对象∶形、机遇与维数》(Les objects fractals∶ forme,hasardetdimension),标志着分形理论的正式诞生,1977年他出版了该书的英译本。1982年曼德勃罗的另一部历史性著作《大自然的分形几何学》与读者见面。该书虽然是前书的增补本,但在曼德勃罗看来却是分形理论的"宣言书",而在分形迷的眼中,它无疑是一部"圣经"。该书旁征博引、图文并茂,从分形的角度考察了自然界中的诸多现象,引起了学术界的广泛注意,曼德勃罗因此一举成名。
此后,一直持续的分形热引起了全世界众多科学家和学者的注意,他们在各自领域中的研究工作,使分形理论遍地开花。

2.创建窗体

创建一个画布,一些控件与按钮,下拉菜单,滚动条等等

最终结果结果如图所示:
在这里插入图片描述

为了让界面更加好看, 我采用一张色卡,用PS取色, 提取其中的墨绿色作为背景, 浅橙色作为树干

墨绿色作为背景

 

浅橙色作为树干

 

3.生成分形树

 

初始化树 使得刚生成的树位于画面最中央

 
 
画树枝

接下来 就要实现画树枝功能:

各个变量定义:

 
树枝的顶点

因此变幻时

 
树干的宽度/粗细

定义树干的宽度

 

此处的数组用到了上面自定义的

递增的数量使得最终的树干会有不同粗细 更好地模拟树的生长

 

由于三叉树时会非常庞大杂乱 因此没有设置很长数组的树宽

画出一条线:在X, Y, x1, y1 间画一条线 这个函数只能接受float类型

 
递归实现树的生长

自然界中的树也具有分形结构。一根主干生长出两个侧干,每个侧干又生长出两个侧干,以此类推,便生长出疏密有致的结构。这样的生长结构,用分形的递归算法也能模拟出来,但不会像自然界中的树那么自然。
(因此在本次实验中,我尝试加入随机值 使得树更加自然生态)

在这里插入图片描述

  1. 递归分形树一(1)如上图所示是分叉树的生成元,利用递归算法生成分叉树的过程,实际上就是将这个生成元在每一个层次上不断重画的过程,具体步骤如下∶
 

注: 初始化时,我将scaledLength调整为四分之三

 

再者,在这个实例里 通过让depth–从而在画分形树的过程中也不断使树干变细,形成树的效果

同时,也实现了三叉树的生成,以下是二者的对比:

1.生成二叉树过程:

递归调用----->绘制右边 +连续分支的角度变化

递归调用----->绘制左边 +连续分支的角度变化

2.生成叉树过程:

递归调用----->绘制右边 +连续分支的角度变化

递归调用----->绘制中边 (不用变幻角度)

递归调用----->绘制左边 +连续分支的角度变化

 
画叶子或者花

点击以下窗体应用的面板
在这里插入图片描述

 

展示:
在这里插入图片描述
我们自然会想到,怎样增加更多树叶或花瓣(甚至是树上的积雪呢)

所以可以对这个代码进行改进

 

在这里插入图片描述

实现随机
 

在这里插入图片描述
函数代码:

 

4.实现文件保存与打开 及Bitmap 类

Bitmap 类

 

bitmap里面要有图片

 
 

如果后缀名是.bmp .png .jpeg .jpg .gif 都可以保存

文件保存与打开:

 

保存后:
在这里插入图片描述
5分形树与其衍生出的其他分形图形 效果展示

利用随机变量 可以生成一些神奇又优美的树

奇怪的树
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
加入落花效果的樱花树:

 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分形树采用递归的方法 从简单的重复迈向复杂 而用随机树创建出来的树和自然界中的树如此相似 让人不禁设想,是不是上帝用了分形算法创造出这些树和世间很多东西呢

总之, 分形真的很让人着迷!!!

版权声明


相关文章:

  • java入栈教程2024-11-22 17:42:06
  • java线上教程趋势2024-11-22 17:42:06
  • java新建gui教程2024-11-22 17:42:06
  • java练习视频教程2024-11-22 17:42:06
  • java字母教程2024-11-22 17:42:06
  • webservice java 视频教程2024-11-22 17:42:06
  • java自学教程忠告2024-11-22 17:42:06
  • java简单易懂教程2024-11-22 17:42:06
  • java发展史教程2024-11-22 17:42:06
  • 最强兄弟java教程2024-11-22 17:42:06