`

谢宾斯基三角形

    博客分类:
  • java
 
阅读更多

 谢宾斯基三角形是有好多的小三角形经过多次迭代之后形成的。首先定义一个画板。

//定义一个三角形的类,继承于JFrame
public class TriangleFrame extends JFrame {
	//定义一个函数的入口主函数
	public static void main(String[] args) {
	//实例化一个对象
		TriangleFrame Tri = new TriangleFrame();
		Tri.showGUI();//调用showGUI函数
	}
	public Graphics g;//定义全局共有变量g
	//  定义showGUI函数
	public void showGUI() {
		this.setSize(600, 600);//设置大小
		this.setTitle("三角形");
		this.getContentPane().setBackground(Color.PINK);//设置背景颜色
		this.setVisible(true);//设置窗体可见
		g=this.getGraphics();
        
	}

 

 

设置好之后,由于是继承了面板,所以可以直接调用重绘方法,不用此方法的话画图的时候一闪而过就没有了。

//定义重绘函数
	public void paint(Graphics g) {
		super.paint(g);//调用重绘函数
		int x1, x2, x3;
		int y1, y2, y3;
		x1 = 250;
		x2 = 10;
		x3 = 500;
		y1 = 100;
		y2 = 400;
		y3 = 400;
        //先画一个三角形
		g.drawLine(250, 100, 10, 400);
		g.drawLine(250, 100, 500, 400);
		g.drawLine(10, 400, 500, 400);
		p(x1, y1, x2, y2, x3, y3, 12);// 调用p函数
	}

 

接下来是用于迭代的方法;

// 定义p函数
	public void p(int x1, int y1, int x2, int y2, int x3, int y3,int count 
			) {
		
		     //设置count小于1时退出递归
		     if (count <1) {return;
			}
			//函数的计算主体
		     g.setColor(Color.BLUE);
			g.drawLine(x1, y1, x2, y2);
			g.drawLine(x1, y1, x3, y3);
			g.drawLine(x2, y2, x3, y3);
			//求出递归坐标的位置
			int px1 = (x2 - x1) / 2 + x1;
			int py1 = (y2 - y1) / 2 + y1;

			int px2 = (x3 - x2) / 2 + x2;
			int py2 = (y3 - y2) / 2 + y2;

			int px3 = (x3 - x1) / 2 + x1; 
			int py3 = (y3 - y1) / 2 + y1;
			count--;//变量自减
			
			// 设置三个不同的递归,参数的不同所以必须得搞三个。
			p(px1, py1, x2, y2, px2, py2, count);
		    p(x1, y1, px1, py1, px3, py3, count);
		    p(px3, py3, px2, py2, x3, y3, count);
	}
}	

 

这样一个谢宾斯基三角形就就好啦。看代码不难发现,代码比较简单,关键是过程比较艰苦。

  • 大小: 36.2 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics