简单分形之谢宾斯基三角形

        学了一段时间的java,接触了很多所谓基础的东西,但总归是没有新奇感的,做出来的大多是一些思维上的产物,而分形出现后,才发现短短几行代码竟可变幻出如此美妙的事物。

        如果没有学习分形,又有谁会想到这张图是用代码敲出来的呢?

 

                            
         那么我们就来看看如何实现这个图形吧。先抛开颜色不管,仔细观察后,我们会发现,它其实就是一个大三角形里面不停的嵌套小三角形,这样想的话思路就会很简单,只要一个小递归就可以实现了。

         这里取三角形的高(h)和底边长的一半(r)作为参数表示点的坐标。

         首先在重绘方法中绘制出初始三角形: 

//重写窗体重绘方法
public void paint(Graphics g){
	super.paint(g);
	int x1=600,y1=50,r=270,h=580;
	g.drawLine(x1, y1, x1-r, y1+h);
	g.drawLine(x1, y1, x1+r, y1+h);
	g.drawLine(x1-r, y1+h, x1+r, y1+h); 
}

         现在我们来写递归函数,每次都传入外边的大三角形,这样它就会在大三角形中绘制出小三角形,随着递归次数增加,大三角形变小,如此循环,直到r、h=0时,停止递归:

public void SJ(int x1,int y1,int r,int h,Graphics g){
	
	//给图形上色,颜色与坐标相关即可做到颜色的变化
	Color c= new Color(x1%255,(x1+y1)%255,(y1*7)%255);
	g.setColor(c);
	
	g.drawLine(x1+r/2, y1+h/2, x1-r/2, y1+h/2);
	g.drawLine(x1-r/2, y1+h/2, x1, y1+h);
	g.drawLine(x1+r/2, y1+h/2, x1, y1+h);

	for(h=h/2,r=r/2;h>0&&r>0;h/=2,r/=2){
		SJ(x1,y1,r,h,g);
		SJ(x1-r,y1+h,r,h,g);
		SJ(x1+r,y1+h,r,h,g);
	}		
}

         最后只要在重绘方法中调用递归方法即可。

SJ(600,50,270,580,g);

         这样就完成了这个分形的基本图形,它有一个很洋气的学名——谢宾斯基三角形。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值