大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > Java技巧 > java画谢尔宾斯基三角形

java画谢尔宾斯基三角形

关键词:画谢尔宾斯基java画谢尔宾斯基三角形  阅读(983) 赞(12)

[摘要]本文主要是对java画谢尔宾斯基三角形的讲解,希望对大家学习java画谢尔宾斯基三角形有所帮助。

  普通几何学研究的对象,一般都具有整数的维数。比如,零维的点、一维的线、二维的面、三维的立体、乃至四维的时空。在20世纪70年代末80年代初,产生了新兴的分形几何学(fractal geometry),空间具有不一定是整数的维,而存在一个分数维数。这是几何学的新突破,引起了数学家和自然科学者的极大关注。根据物理学家李荫远院士的建议,大陆将fractal一开始就定译为“分形”,而台湾学者一般将fractal译作“碎形”。

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

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

  2、打开eslips,建立一个Java的工程命名自己命吧,这个随便的哈;

  (这是我建立的工程)

  //3、这个程序需要引入的包:

  import java.awt.Color;

  import java.awt.Graphics;

  import javax.swing.JFrame;

  //4、主类继承JFrame,因此Retangerate拥有所有JFrame的方法

  public class Retangerate extends JFrame{

  /**

  * @param args

  */

  public static void main(String[] args) {

  Retangerate a = new Retangerate();

  a.Draw();

  }

  //5、需要创建的方法一:(绘制三角形)

  //在这个方法里绘出窗体,并生成画布对象

  public void Draw() {

  this.setSize(1000,700);

  this.setLocationRelativeTo(null);

  this.setDefaultCloseOperation(3);

  this.setVisible(true);

  Graphics g = this.getGraphics();

  }

 

  //6、定义重绘方法,拖动窗口,改变窗口大小后,绘制的图片仍然留在窗体上

  public void paint(Graphics g){

  super.paint(g);

  Show(100,600,900,600,500,30,200,235,235,10,g);//调用递归函数Show(),所涉及的参数:

  // x1的位置,y1的位置,x2的位置,y2的位置,x3的位置,y3的位置,

  // (以下三个属性是颜色控制,如果需要渐变色彩的话)

  }

  public void Show(double x,double y,double x2,double y2,double x3,double y3,

  int a,int b,int c,int count,Graphics g){

  int tempx = (int)x;

  int tempy = (int)y;

  int tempx2 = (int)x2;

  int tempy2 = (int)y2;

  int tempx3 = (int)x3;

  int tempy3 = (int)y3;

  if(a< 0||b< 0||c< 0)

  {

  a=355;

  b=155;

  c=35;

  }

  //计算出三点的位置

  g.setColor(new Color(a,b,c));

  g.drawLine(tempx,tempy,tempx2,tempy2);

  g.drawLine(tempx,tempy,tempx3,tempy3);

  g.drawLine(tempx2,tempy2,tempx3,tempy3);

  if(count>=2){//判断是否进行递归

  int xm = tempx;

  int ym = tempy;

  int xm2 = tempx2;

  int ym2 = tempy2;

  int xm3 = tempx3;

  int ym3 = tempy3;

  tempx = (xm+xm2)/2;

  tempy = (ym+ym2)/2;

  tempx2 = (xm+xm3)/2;

  tempy2 = (ym+ym3)/2;

  tempx3 = (xm3+xm2)/2;

  tempy3 = (ym3+ym2)/2;

  this.Show(xm,ym,tempx,tempy,tempx2,tempy2,a-10,b-16,c-10,count-1,g);

  this.Show(tempx,tempy,xm2,ym2,tempx3,tempy3,a-14,b-16,c-18,count-1,g);

  this.Show(xm3,ym3,tempx2,tempy2,tempx3,tempy3,a-17,b-14,c-0,count-1,g);

  //由于下次分形要分成三个所以要在一次Show调用自己三次

  g.drawLine(tempx,tempy,tempx2,tempy2);

  g.drawLine(tempx,tempy,tempx3,tempy3);

  g.drawLine(tempx2,tempy2,tempx3,tempy3);

  }

  else{

  return ;

  }

  }

  }



相关评论