很有趣的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)


相关推荐

  • 激活成功教程芝诺悖论之阿基里斯追乌龟

    激活成功教程芝诺悖论之阿基里斯追乌龟版权所有。所有权利保留。欢迎转载,转载时请注明出处:阿基里斯是古希腊神话中善跑的英雄。在他和乌龟的竞赛中,他速度v1,位置坐标0;乌龟速度v2,位置坐标s。已知v1>v2。他在后面追,但他不可能追上乌龟。因为在竞赛中,追者首先必须到达被追者的出发点,当阿基里斯追到s时,乌龟已经又向前爬了s/v1*v2,位置s+s/v1*v2。于是,一个新的起点产生了;阿基里斯必须继续追,而当他追到乌龟爬的

  • Python实现排列组合算法

    Python实现排列组合算法实现组合算法C(n,k),可以用递归实现:importcopy#实现list的深复制defcombine(lst,l):result=[]tmp=[0]*llength=len(lst)defnext_num(li=0,ni=0):ifni==l:result.append…

    2022年10月20日
  • pychram激活码【注册码】

    pychram激活码【注册码】,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • java反射

    java反射

    2021年11月12日
  • 国防科大计算机夏令营经验分享,保研经验|理工科五所985高校夏令营经验

    国防科大计算机夏令营经验分享,保研经验|理工科五所985高校夏令营经验原标题:保研经验|理工科五所985高校夏令营经验个人介绍姓名:萱同学本科学校:南京理工大学本科专业:兵器类-装甲车辆工程年级排名:1/197(截止至第五学期)专业排名:1/30(前5学期)英语水平:CET4-602,CET6-522科研情况:国家级科研项目结题,个人承担2个子课题(共3个)受理一项发明专利、实用新型专利荣誉称号:五学期优秀学生奖学金南京理工大学三好学生、优秀共青团干部等夏令营入营:…

  • mysql批量插入大量数据「建议收藏」

    mysql批量插入大量数据「建议收藏」mysql批量插入大量数据时间:2020年11月25日今天遇到了一个批量插入大量数据任务,然后出于小白本能,直接for-each循环插入不就好了,于是手上开始噼里啪啦一顿操作,写好了从读取excel到插入数据库的工作,于是就美滋滋的开始了自己的测试,试了一把,一次通过perfect,然后后面就悲剧了,后面发现数据量稍微大一点,速度就会很慢很慢。于是掏出自己的制胜法典,后来我在知识和海洋中获取到了两种靠谱的方法。下面一点一点讲。测试的服务器信息1核2g5m的阿里云服务器(你懂得),mysql直接装

发表回复

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

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