很有趣的Java分形绘制

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

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

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

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

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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 三种主流内存技术(DDR、GDDR、LPDDR)的速度对比与应用和DDR5芯片的设计「建议收藏」

    三种主流内存技术(DDR、GDDR、LPDDR)的速度对比与应用和DDR5芯片的设计「建议收藏」三种主流内存技术(DDR、GDDR、LPDDR)的速度对比与应用和DDR5芯片的设计

    2022年4月21日
    76
  • Hans Berger脑电图之父的人生摘要「建议收藏」

    Hans Berger脑电图之父的人生摘要「建议收藏」摘要:在1938年当脑电图被学术界接受之时,第二次世界大战要开始了,因为英美法都是敌对国,Berger访美计划搁浅。同时大概因为只是英美法学者对脑电图重视,德国本土学者根本不相信,德国当时的纳粹政权禁止研究脑电图。【转载】HansBerger(1873-1941)(上图)是德国精神病学家,精神生理学家,他对神经科学的贡献是发明了和命名了脑电图-Electroencephalography,EEG,德语是Elektrenkephalogramm。此外,Berger发现了“阿尔法波-AlphaWave”,

    2022年8月11日
    5
  • chmod命令详细用法

    chmod命令详细用法指令名称:chmod使用权限:所有使用者使用方式:chmod[-cfvR][–help][–version]modefile…说明:Linux/Unix的档案调用权限分为三级:档案拥有者、群组、其他。利用chmod可以藉以控制档案如何被他人所调用。参数:mode:权限设定字串,格式如下:[ugoa…][[±=][rwxX]…][,…],其中…

    2022年6月24日
    28
  • [Vue warn]: Do not use built-in or reserved HTML elements as component id: content「建议收藏」

    [Vue warn]: Do not use built-in or reserved HTML elements as component id: content「建议收藏」一、错误在Vue中引入组件报错:[Vue warn]: Do not use built-in or reserved HTML elements as component id: content二:原因在vue里面不允许用特殊的标签来做自定义的标签比如你不能用a来接收一个组件的注册然后在以自定义标签的方式引用会被限制三、结果方法将冲突的content替换成‘v-content…

    2022年6月13日
    36
  • html5爱心代码_html爱心动画代码

    html5爱心代码_html爱心动画代码代码<!doctypehtml><html><head><metacharset=”utf-8″><title>canvas爱心</title><style>html,body{height:100%;padding:0;margin:0;background:#000;}canvas{position:absolute;width:100%;

    2022年10月10日
    0
  • pycharm2019.2.6版本改中文_pycharm怎么更改python环境

    pycharm2019.2.6版本改中文_pycharm怎么更改python环境1.文件——设置——项目——python解释器2.点最右边的设置图标——添加3.选择现有环境——点击右边省略号4.找到你要的python版本的地址——找到python.exe——确定做完这些就完成了

    2022年8月28日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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