传说中,“潘朵拉盒子”是“上帝”与“魔鬼”为了“天堂之约”而共同创造的“宝物”,是用来存放“情感精灵”的地方。左边,是“上帝”存放“乐趣精灵”的地方;右边是“魔鬼”存放“痛苦精灵”的地方。
而我认为,潘多拉的精彩之处在于你永远不会知道下一个出现的东西是什么,对你来说是好是坏。最近写的这个小程序,就是想取它的这层意思,通过随机数的调用,结合线程,分形一起做一个你永远猜不到下一个图案会是什么样的程序。
做之前,一直搞不懂,为什么要花那么多的时间去做分形的练习。明明就是几个数学函数所展示出的图片么,有专用强大的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()函数帮忙实现。
展示俩张半成品的图
不足之处还是存在,例如:图形各部分颜色的不同,迭代次数,节目的设计还没有完善。在以后的调试中,努力实现