关于简单分形图形的绘制

本文介绍了分形图形的绘制,包括谢尔宾斯基三角形的递归画法和通过函数关系式创建的图像。通过递归规律和坐标变换,将数学公式转化为可视化的艺术作品。虽然遇到如渐变色和笛卡尔心形曲线等挑战,但分形图形的奇妙世界激发了进一步探索的兴趣。
摘要由CSDN通过智能技术生成

保密之前,我们在蓝杰学习了分形图形的画法,分形不跟其他的程序一样,基础的学习之后,我们发现,分形就是通过简单的循环递归,或者根据某种规律实现一步步的画图,画出一些根据某种特殊关系形成的图形。

拿最基础的我们画过了谢尔宾斯基三角形,和一些简单的通过函数画成的图形来说:

谢尔宾斯基三角形

画谢尔宾斯基三角形的重点是,掌握好每次的递归规律:

首先它的递归规律是,先画出一个大三角形A,然后再取出它的各个边中点连接,之后再把每个边上的三角形当成一个大三角形A,重复上面的步骤。

 

 

 

 

 

下面是代码:

 

 

/**
 * 1.画谢尔宾斯基三角形
 * @param count 循环的次数
 */
public void drawSJX(double x1,double y1,double x2,double y2,double x3,double y3,int count){
	//第一次循环时画出最大的三角A
	if(count==10){
		g.drawLine((int)x1, (int)y1,(int) x2,(int) y2);
		g.drawLine((int)x1, (int)y1, (int)x3, (int)y3)
		g.drawLine((int)x2, (int)y2, (int)x3, (int)y3);
	}
	//开始递归
	if(count>0){
	//画大三角A的中位线
	g.drawLine((int)(x1+x3)/2, (int)(y1+y3)/2,(int)(x2+x3)/2,(int) (y2+y3)/2);
	g.drawLine((int)(x1+x3)/2, (int)(y1+y3)/2,(int)(x2+x1)/2, (int)(y2+y1)/2);
	g.drawLine((int)(x2+x3)/2,(int) (y2+y3)/2,(int) (x2+x1)/2, (int)(y2+y1)/2);
	//分别把角上三个小三角当作大三角A重复画中位线的步骤
	drawSJX(x1,y1,(x2+x1)/2,(y2+y1)/2,(x1+x3)/2,(y1+y3)/2,count-1);		
	drawSJX((x2+x1)/2,(y2+y1)/2,x2,y2,(x2+x3)/2,(y2+y3)/2,count-1);		
	drawSJX((x1+x3)/2,(y1+y3)/2,(x2+x3)/2,(y2+y3)/2,x3,y3,count-1);
			
	}	
				
}

 

 

 

 之后再在按钮实现类里编写相关画图的方式:

 

 

//实现接口中的方法
public void actionPerformed(ActionEvent e) {
	String str=e.getActionCommand();
	System.out.println("str="+str);
	//开始绘制图形
	if(str.equals("谢尔宾斯基三角形")){
		double x1=100,y1=600;
		double x2=600,y2=600;
		double x3=(x2+x1)/2,y3=y1-Math.sqrt(3.00d)*(x3-x1);
		int count=10;
		drawSJX( x1, y1, x2, y2, x3, y3,count);
		
		}else if(str.equals("清空")){
			g.clearRect(100, 130, 980, 628);
		}	
	}

 

 

 

 

 

 

 

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值