很有趣的Java分形绘制

部分与整体以某种形式相似的形,称为分形。首先我们举个例子:我们可以看到西兰花一小簇是整个花簇的一个分支,而在不同尺度下它们具有自相似的外形。换句话说,较小的分支通过放大适当的比例后可以得到一个与整体

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

很有趣的Java分形绘制此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“”,获取验证码。在微信里搜索“”或者“”或者微信扫描右侧二维码都可以关注本站微信公众号。

部分与整体以某种形式相似的形,称为分形。
首先我们举个例子:
       我们可以看到西兰花一小簇是整个花簇的一个分支,而在不同尺度下它们具有自相似的外形。换句话说,较小的分支通过放大适当的比例后可以得到一个与整体几乎完全一致的花簇。因此我们可以说西兰花簇是一个分形的实例。
分形一般有以下特质:
在任意小的尺度上都能有精细的结构; 太不规则,以至难以用传统欧氏几何的语言描述; (至少是大略或任意地)自相似豪斯多夫维数会大於拓扑维数; 有著简单的递归定义。
(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 } 

很有趣的Java分形绘制

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/120795.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 免费大数据平台有哪些?

    免费大数据平台有哪些?

  • java+毕业设计+进销存管理系统+源码+论文.rar

    java+毕业设计+进销存管理系统+源码+论文.rar【摘要】进销存管理系统是一个基于Internet的应用系统,它是一个面对当前的进销存管理工作基本还处于手工和半信息自动化处理状态而应运而生的一个基于Internet的一个完全信息自动化的系统,整个系统从符合操作简便、界面友好、灵活、实用、安全的要求出发,完成进货、销售、库存管理的全过程。企业单位只需具备访问Internet的条件即可在系统发布的站点上进行进销存的管理。在图型化的人机界面中完成日常的进销存管理工作.一方面摆脱了时间和空间的限制,另一方面有效的解决的数据共享的问题。经过实际使用证明,本文所

  • datagrip2021激活码-激活码分享

    (datagrip2021激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html…

  • 企业级Nginx负载均衡与keepalived高可用实战视频教程「建议收藏」

    企业级Nginx负载均衡与keepalived高可用实战视频教程

  • 七、springboot整合flowable(工作流)

    七、springboot整合flowable(工作流)springboot整合flowable(工作流)简介Flowable适用于开发人员,系统管理员和业务用户的紧凑且高效的工作流程和业务流程管理(BPM)平台。Flowable的发布包里包含了大部分源码,以JAR文件方式提供。Flowable的源码也可以通过以下链接获得:https://github.com/flowable/flowable-engine准备工作pom….

  • python基础(9)增强型赋值与使用普通赋值的区别[通俗易懂]

    python基础(9)增强型赋值与使用普通赋值的区别[通俗易懂]前言增强型赋值语句是经常被使用到的,因为从各种学习渠道中,我们能够得知i+=1的效率往往要比i=i+1更高一些(这里以+=为例,实际上增强型赋值语句不仅限于此)。所以我们会乐此不

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号