TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
普通几何学研究的对象,一般都具有整数的维数。比如,零维的点、一维的线、二维的面、三维的立体、乃至四维的时空。在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 ;
- }
- }
- }
复制代码
源码下载:http://file.javaxxz.com/2014/11/13/235829453.zip |
|