小小“潘多拉”魔盒

传说中,“潘朵拉盒子”是“上帝”与“魔鬼”为了“天堂之约”而共同创造的“宝物”,是用来存放“情感精灵”的地方。左边,是“上帝”存放“乐趣精灵”的地方;右边是“魔鬼”存放“痛苦精灵”的地方。 

而我认为,潘多拉的精彩之处在于你永远不会知道下一个出现的东西是什么,对你来说是好是坏。最近写的这个小程序,就是想取它的这层意思,通过随机数的调用,结合线程,分形一起做一个你永远猜不到下一个图案会是什么样的程序。

 

做之前,一直搞不懂,为什么要花那么多的时间去做分形的练习。明明就是几个数学函数所展示出的图片么,有专用强大的Maltab去画它就好,又何必去折腾绘制它呢。分形的出现对于大脑来说不亚于高数的折磨。

 

什么迭代啊,重绘啊,画板上所展示函数的部分,放大啊,位置的调整啊,都比较折腾。

 

光是迭代中,要绘制图形时,在不同的迭代时,点的坐标简直可以让人抓狂,稍不注意,出来的图形完全意想不到。

Draw1(g, x1, y1, x6, y6, x5, y5, n - 1);
Draw1(g, x6, y6, x2, y2, x4, y4, n - 1);
Draw1(g, x5, y5, x4, y4, x3, y3, n - 1);

 这几个点的顺序让我纠结了好久,图上画出来写好的点,一运行就各种神奇。

对于x5,x6,x7,y5,y6,y7的定义,一开始没有想太多,也算意识不够强烈吧,只把他们定义为全局变量,结果在每次调用时都要重新开始算值,导致图形始终只保持一种形状,与不用迭代前无区别。

在N值得使用上,函数中填写n总是导致越界。这一点,值得留意。

 

分形的美丽炫彩图案有很多,个人比较喜欢

 还有

 这俩个图片

 

当然,在没有使用线程前,点击按钮后,迭代没有完成按钮不会弹起,当然也不会出现好多幅图案同时迭代的“壮观场面”

线程的使用,需要继承Thread类

其中主要用到的方法也就是start();run();stop();和sleep();

MyThread mt = new MyThread(g);
		mt.start();


public void run() {
		//判断点击次数并运行分形
		
		Random r = new Random();
		int q = r.nextInt(3);
		
		if (q==0) {
		 Draw1(g,x1,y1,x2,y2,x3,y3,n);
		} if(q==1){
			g.clearRect(0, 0, 1230,700);
			g.setColor(Color.green);
			Draw3(g,x4,y4,x5,y5,n);
		} if(q==2) {
			g.clearRect(0, 0, 1230,700);
			g.setColor(Color.red);
			Draw4(x1,y1,x2,y2,deepth);
			g.clearRect(0, 0, 1230,700);
		} 
	}


public void sleep(int sTime){
		try {
			Thread.sleep(sTime);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

 

因为用的方法是点击按钮生成随机数,继而将随机数传递个判断框进而调用函数,所以借用Random()函数实现了随机的过程。

 

而每一次分形结束后都要清屏,负责就会有图像的重叠,影响后来图像的美观。这里使用.clearRect()函数帮忙实现。

 

展示俩张半成品的图

 

 不足之处还是存在,例如:图形各部分颜色的不同,迭代次数,节目的设计还没有完善。在以后的调试中,努力实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值