部分与整体以某种形式相似的形,称为分形。
首先我们举个例子:
我们可以看到西兰花一小簇是整个花簇的一个分支,而在不同尺度下它们具有自相似的外形。换句话说,较小的分支通过放大适当的比例后可以得到一个与整体几乎完全一致的花簇。因此我们可以说西兰花簇是一个分形的实例。
分形一般有以下特质:
在任意小的尺度上都能有精细的结构; 太不规则,以至难以用传统欧氏几何的语言描述; (至少是大略或任意地)自相似豪斯多夫维数会大於拓扑维数; 有著简单的递归定义。
(i)分形集都具有任意小尺度下的比例细节,或者说它具有精细的结构。
(ii)分形集不能用传统的几何语言来描述,它既不是满足某些条件的点的轨迹,也不是某些简单方程的解集。
(iii)分形集具有某种自相似形式,可能是近似的自相似或者统计的自相似。
(iv)一般,分形集的“分形维数”,严格大于它相应的拓扑维数。
(v)在大多数令人感兴趣的情形下,分形集由非常简单的方法定义,可能以变换的迭代产生。
用java写分形时,不同的图形根据不同的画法调用递归来实现,如:
科赫曲线:
 1 public void draw1(int x1, int y1, int x2, int y2,int depth) {//科赫曲线   keleyi.com
 2         g.drawLine(x1, y1, x2, y2);
 3         if (depth<=1)
 4             return;
 5         else {//得到三等分点
 6             double x11 = (x1 * 2  + x2)  / 3;
 7             double y11 = (y1 * 2  + y2) / 3;
 8
 9             double x22 = (x1 + x2 * 2) / 3;
10             double y22 = (y1 + y2 * 2) / 3;
11
12             double x33 = (x11 + x22) / 2 - (y11 - y22) * Math.sqrt(3) / 2;
13             double y33 = (y11 + y22) / 2 - (x22 - x11) * Math.sqrt(3) / 2;
14
15             g.setColor(j.getBackground());
16             g.drawLine((int) x1, (int) y1, (int) x2, (int) y2);
17             g.setColor(Color.black);
18             draw1((int) x1, (int) y1, (int) x11, (int) y11,depth-1);
19             draw1((int) x11, (int) y11, (int) x33, (int) y33,depth-1);
20             draw1((int) x22, (int) y22, (int) x2, (int) y2,depth-1);
21             draw1((int) x33, (int) y33, (int) x22, (int) y22,depth-1);
22         }
23     } 

正方形:

 1 public void draw2(int x1, int y1, int m,int depth) {//正方形 keleyi.com
 2         g.fillRect(x1, y1, m, m);
 3         m = m / 3;
 4         if (depth<=1)
 5             return;
 6         else{
 7         double x11 = x1 - 2 * m;
 8         double y11 = y1 - 2 * m;
 9
10         double x22 = x1 + m;
11         double y22 = y1 - 2 * m;
12
13         double x33 = x1 + 4 * m;
14         double y33 = y1 - 2 * m;
15
16         double x44 = x1 - 2 * m;
17         double y44 = y1 + m;
18
19         double x55 = x1 + 4 * m;
20         double y55 = y1 + m;
21
22         double x66 = x1 - 2 * m;
23         double y66 = y1 + 4 * m;
24
25         double x77 = x1 + m;
26         double y77 = y1 + 4 * m;
27
28         double x88 = x1 + 4 * m;
29         double y88 = y1 + 4 * m;
30
31         draw2((int) x11, (int) y11, (int) m,depth-1);
32
33         draw2((int) x22, (int) y22, (int) m,depth-1);
34
35         draw2((int) x33, (int) y33, (int) m,depth-1);
36
37         draw2((int) x44, (int) y44, (int) m,depth-1);
38
39         draw2((int) x55, (int) y55, (int) m,depth-1);
40
41         draw2((int) x66, (int) y66, (int) m,depth-1);
42
43         draw2((int) x77, (int) y77, (int) m,depth-1);
44
45         draw2((int) x88, (int) y88, (int) m,depth-1);
46         }
47
48     }  

谢冰斯基三角形:

 1 public void draw3(int x1,int y1,int x2,int y2,int x3,int y3,int depth){//三角形   keleyi.com
 2
 3         double s = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
 4         g.drawLine(x1,y1,x2,y2);
 5         g.drawLine(x2,y2,x3,y3);
 6         g.drawLine(x1,y1,x3,y3);
 7 //      if(s<3)
 8 //          return;
 9         if (depth<=1)
10             return;
11         else
12         {
13         /*
14          * 上面的三角形
15          */
16         double x11=(x1*3+x2)/4;
17         double y11=y1-(s/4)*Math.sqrt(3);
18
19         double x12=(x1+x2*3)/4;
20         double y12=y11;
21
22         double x13=(x1+x2)/2;
23         double y13=y1;
24
25         /*
26          * 左边的三角形
27          */
28         double x21=x1-s/4;
29         double y21=(y1+y3)/2;
30
31         double x22=x1+s/4;
32         double y22=y21;
33
34         double x23=x1;
35         double y23=y3;
36
37         /*
38          * 右边的三角形
39          */
40         double x31=x2+s/4;
41         double y31=(y1+y3)/2;
42
43         double x32=x2-s/4;
44         double y32=y21;
45
46         double x33=x2;
47         double y33=y3;
48
49
50         draw3((int)x11,(int)y11,(int)x12,(int)y12, (int)x13, (int)y13, depth-1);
51         draw3((int)x21,(int)y21,(int)x22,(int)y22, (int)x23, (int)y23, depth-1);
52         draw3((int)x31,(int)y31,(int)x32,(int)y32, (int)x33, (int)y33, depth-1);
53         }
54     } 

科赫曲线是一种外形像雪花的几何曲线,所以又称为雪花曲线,它是分形曲线中的一种,具体画法如下:

1、任意画一个正三角形,并把每一边三等分;
2、取三等分后的一边中间一段为边向外作正三角形,并把这“中间一段”擦掉;
3、重复上述两步,画出更小的三角形。
4、一直重复,直到无穷,所画出的曲线叫做科赫曲线。

小结:分形是个很好玩的东西,根据自己的奇妙想象可以画出很多很好看的图形,不仅仅是已经存在的,你可以创造出属于你自己的图形!

转载于:https://www.cnblogs.com/roucheng/p/3453047.html

很有趣的Java分形绘制相关推荐

  1. Java 注解 --很有趣的一篇文章

    初学者可以看看,很有趣的文章,简单易懂,生动有趣. 原文链接:https://blog.csdn.net/briblue/article/details/73824058

  2. 史上最扯Java图形绘制(J2SE)之一JAVA动画效果

    很多主一听说Java界面,一水的头大外带血压高,兄弟我倒觉得没什么必要.           其实Java这东西吧,就简便性和其初衷而言,真他妈就在GUI 这地界是有优势的,单就其2D界面开发的易用性 ...

  3. 使用Java编一个有意思的_一个有趣的Java编译问题

    学员冯伟立今天中午问了我一个有趣的Java编译问题,我也无法给他解释,不知道有没有路过的高人能够解释清楚原因,望不吝赐教! 下面程序的main方法中的第二行代码和注释中的两行代码表达的意思完全相同,注 ...

  4. (转) 机器学习很有趣Part6:怎样使用深度学习进行语音识别

    本文转自:http://www.jiqizhixin.com/article/2321 机器学习很有趣Part6:怎样使用深度学习进行语音识别 2017-02-19 13:20:47    机器学习  ...

  5. 爬虫技术做到哪些很酷很有趣很有用的事情

    能利用爬虫技术做到哪些很酷很有趣很有用的事情? 准备学习python爬虫.各位大神都会用爬虫做哪些有趣的事情? 今天突然想玩玩爬虫,就提了这个问题.跟着YouTube上的一个tutor写了个简单的程序 ...

  6. 有趣的java 开发_开发人员历史中的五个有趣时刻

    有趣的java 开发 我在整个开发环境中工作了30多年. 我开始共享一个实际上有门的办公室. 是的,那是很久以前了. 我从办公室到立方体再到开放空间. 我曾在大型团队,小型团队和许多中型团队中工作. ...

  7. 微软todo使用教程_Todo教程可能很有趣-但是,这是从头开始构建自己的项目的方法...

    微软todo使用教程 There are many great tutorials that walk you through creating apps, from simple todo list ...

  8. 这是一张很有趣的图片, 通常女性会先看到月亮, 男性会先看到人脸. 如果相反, 表示你体内的异性荷尔蒙偏高哦!...

    这是一张很有趣的图片, 通常女性会先看到月亮, 男性会先看到人脸. 如果相反, 表示你体内的异性荷尔蒙偏高哦! 四不像...

  9. 一个很艰难的 Java 核心面试问题!

    一个很艰难的 Java 核心面试问题,这个 Java 问题也常被问: 什么是线程安全的单例,你怎么创建它. 好吧,在Java 5之前的版本, 使用双重检查锁定创建单例 Singleton 时,如果多个 ...

最新文章

  1. PCE:南农沈其荣团队根系分泌物驱动土壤-微生物-养分之间的反馈作用以响应植物的生长...
  2. 【EXLIBRIS】随笔记 001
  3. logrotate管理nginx日志文件
  4. 机器学习-吴恩达-笔记-8-支持向量机
  5. Fortran 语言学习(菜鸟都可以看得懂的入门级教程)(持续更新中ing...)
  6. C#常见操作类(一)
  7. 人工智能(7)---一文读懂人脸识别技术:商业应用、产品落地、核心技术、市场规模
  8. 还不重视!脸上有螨虫的几种表现?
  9. 万国数据二季度调整后EBITDA利润率43.5% 高于指引预测
  10. 裁剪图片 华为手机显示为圆
  11. Qt5.9问题解决 Clock skew detected. Your build may be incomplete,has modification time in the future
  12. Excel转格式数字转人民币大写
  13. 网易NEC命名规范笔记
  14. 【动态规划】字符串类型动态规划
  15. 3DMAX动画渲染 军舰在海中航行
  16. 字节小组长无意得知手下有35K,自己却只有28K;谷歌推出Go版Android 11;Deepin v20正式发布!...
  17. android打电话 接电话 挂电话流程分析
  18. 【设计模式-手写源码-附1】-简单工厂模式-基于魔兽争霸冰封王座
  19. pytz 的所有函数
  20. inno setup 中文乱码问题_Inno Setup添加中文安装语言文件

热门文章

  1. WindStyle ExifInfo for Windows Live Writer发布
  2. 择师论(怎么有效的向别人学习)
  3. GitKraken漏洞可用于盗取源代码,四大代码托管平台撤销SSH密钥
  4. 彪马PUMA源代码被盗,称客户数据不受影响
  5. 这两个漏洞暴露 Facebook Group 成员,有个用手机就能发现,获奖$9000
  6. 奇安信代码安全实验室帮助微软修复两个 “重要” 漏洞,获官方致谢
  7. 近300个 Windows 10 可执行文件易受 DLL 劫持攻击
  8. 路径取值之含正则表达式的的取值方法
  9. No project is easy, am I right?
  10. Android本地应用程序应用方式介绍