谢尔宾斯基三角形
用java去画这个谢尔宾斯基三角形首先我们先去画一个大的三角形,然后呢去找各边中点去进行连线,这样我们刚开始的思路就完成了,最后用递归(用方法去调用本身的方法)就好了。
int x6 = 400,y6 = 200,d = 400; // 我们先找一个点 ,并赋予边长 。
int n=10;// 循环次数
public void a(int n,int x6,int y6,int d) {
if(n==0) { // 递归一定要有一个结束语句。
return;
}
double x7 = x6-d/2; // 找到其他两个点
double args = Math.sqrt(3)/2;
double y7 = y6+args*d;
double x8 = x6+d/2;
double y8 = y6+args*d;
//因绘制线段的方法需要整型作为参数故进行强制类型转换
int x1f = (int)x7;
int y1f = (int)y7;
int x2f = (int)x8;
int y2f = (int)y8;
//绘制主三角形
g2.drawLine(x6, y6, x2f, y2f);
g2.drawLine(x6, y6, x1f, y1f);
g2.drawLine(x1f,y1f,x2f,y2f);
//三段线段的中点坐标
int n1x = (x6+x1f)/2;
int n1y = (y1f+y6)/2;
int n2x = (x2f+x6)/2;
int n2y = (y2f+y6)/2;
int n3x = (x2f+x1f)/2;
int n3y = y2f;
//绘制下次递归挖去的三角形
g2.drawLine(n1x, n1y, n2x, n2y);
g2.drawLine(n2x, n2y, n3x, n3y);
g2.drawLine(n1x, n1y, n3x, n3y);
//递归调用绘制方法 递归层数减一 边长减半 以两个中点为新顶点
a(n-1,n1x,n1y,d/2);
a(n-1,n2x,n2y,d/2);
a(n-1,x6,y6,d/2);
}
然后再把我们之前的窗口,监听器等加进去就好了 最后结果是这个样子的。