谢宾斯基三角形是有好多的小三角形经过多次迭代之后形成的。首先定义一个画板。
//定义一个三角形的类,继承于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);
}
}
这样一个谢宾斯基三角形就就好啦。看代码不难发现,代码比较简单,关键是过程比较艰苦。