Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 503|回复: 0

[Swing学习]java画谢尔宾斯基三角形(分形)

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-11-13 23:58:29 | 显示全部楼层 |阅读模式
    普通几何学研究的对象,一般都具有整数的维数。比如,零维的点、一维的线、二维的面、三维的立体、乃至四维的时空。在20世纪70年代末80年代初,产生了新兴的分形几何学(fractal geometry),空间具有不一定是整数的维,而存在一个分数维数。这是几何学的新突破,引起了数学家和自然科学者的极大关注。根据物理学家李荫远院士的建议,大陆将fractal一开始就定译为“分形”,而台湾学者一般将fractal译作“碎形”。
    ――摘自百度百科

        对于初学java的同学来说,做分形,的确是一个锻炼思维,熟悉递归算法的好方法,而在众多分形图案中,谢尔宾斯基三角形可以说是比较容易入手的,因为它不管是公式还是图案都比较简单,学会如何用java画歇尔滨斯基三角形后,再画其他图案都会简单很多;今天我们就从歇尔滨斯基三角形入手,进入分形的世界.
       
      
       
       

         
       

         
       
      
    1、用Java绘制歇尔滨斯基三角形首先要知道如何建立窗体,调取画布对象,如何画线,有一定的数学基础(了解正三角形的性质),还有――数学思维。

    2、打开eslips,建立一个Java的工程命名自己命吧,这个随便的哈;  (这是我建立的工程)
    //3、这个程序需要引入的包:
    1. import java.awt.Color;
    2. import java.awt.Graphics;
    3. import javax.swing.JFrame;
    4. //4、主类继承JFrame,因此Retangerate拥有所有JFrame的方法
    5. public class Retangerate extends JFrame{
    6. /**
    7. * @param args
    8. */
    9. public static void main(String[] args) {
    10.   Retangerate a = new Retangerate();
    11.   a.Draw();
    12. }

    13. //5、需要创建的方法一:(绘制三角形)
    14. //在这个方法里绘出窗体,并生成画布对象
    15. public void Draw() {
    16.    this.setSize(1000,700);
    17.    this.setLocationRelativeTo(null);
    18.    this.setDefaultCloseOperation(3);
    19.    this.setVisible(true);
    20.    Graphics g = this.getGraphics();
    21. }
    22. //6、定义重绘方法,拖动窗口,改变窗口大小后,绘制的图片仍然留在窗体上
    23. public void paint(Graphics g){
    24.   super.paint(g);
    25.   Show(100,600,900,600,500,30,200,235,235,10,g);//调用递归函数Show(),所涉及的参数:
    26. // x1的位置,y1的位置,x2的位置,y2的位置,x3的位置,y3的位置,
    27. //  (以下三个属性是颜色控制,如果需要渐变色彩的话)
    28. }
    29. public void Show(double x,double y,double x2,double y2,double x3,double y3,
    30.                  int a,int b,int c,int count,Graphics g){
    31. int tempx = (int)x;
    32. int tempy = (int)y;
    33. int tempx2 = (int)x2;
    34. int tempy2 = (int)y2;
    35. int tempx3 = (int)x3;
    36. int tempy3 = (int)y3;
    37. if(a< 0||b< 0||c< 0)
    38. {
    39.    a=355;
    40.    b=155;
    41.    c=35;
    42.   }
    43. //计算出三点的位置
    44.   g.setColor(new Color(a,b,c));
    45.   g.drawLine(tempx,tempy,tempx2,tempy2);
    46.   g.drawLine(tempx,tempy,tempx3,tempy3);
    47.   g.drawLine(tempx2,tempy2,tempx3,tempy3);
    48.   if(count>=2){//判断是否进行递归
    49.     int xm = tempx;
    50.     int ym = tempy;
    51.     int xm2 = tempx2;
    52.     int ym2 = tempy2;
    53.     int xm3 = tempx3;
    54.     int ym3 = tempy3;
    55.     tempx = (xm+xm2)/2;
    56.     tempy = (ym+ym2)/2;
    57.     tempx2 = (xm+xm3)/2;
    58.     tempy2 = (ym+ym3)/2;
    59.     tempx3 = (xm3+xm2)/2;
    60.     tempy3 = (ym3+ym2)/2;
    61.     this.Show(xm,ym,tempx,tempy,tempx2,tempy2,a-10,b-16,c-10,count-1,g);
    62.     this.Show(tempx,tempy,xm2,ym2,tempx3,tempy3,a-14,b-16,c-18,count-1,g);
    63.     this.Show(xm3,ym3,tempx2,tempy2,tempx3,tempy3,a-17,b-14,c-0,count-1,g);
    64.         //由于下次分形要分成三个所以要在一次Show调用自己三次
    65.     g.drawLine(tempx,tempy,tempx2,tempy2);
    66.     g.drawLine(tempx,tempy,tempx3,tempy3);
    67.     g.drawLine(tempx2,tempy2,tempx3,tempy3);
    68.    }
    69.   else{
    70.    return ;
    71.   }
    72. }
    73. }
    复制代码


      
      
       
       

         
       

         
       
      
    复制代码

    源码下载:http://file.javaxxz.com/2014/11/13/235829453.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-25 07:24 , Processed in 0.372915 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表