我们通过画板来实现图像的生成,迭代图像即通过一定的坐标推算公式,从初始坐标点不断获取新的坐标值并打点,修改点迹颜色以形成一个有深浅变化的图像。用代码实现自然界的美,生成一系列二维,三维的图像,它们不是杂乱无章的,而是具有一定规则的富有美感的图像。
if("迭代图像".equals(name))
{
x=e.getX();
y=e.getY();
iterate(x,y);
}
public void iterate(double x,double y)
{
System.out.println("打印");
for(int i=0;i<25500;i++)
{
double temx= Math.sin(a*y)+c*Math.cos(a*x);
double temy=Math.sin(b*x)+d*Math.cos(b*y);
int x1= (int)(temx*130+400); //对x1,y1转型,放大,移动到屏幕坐标系
int y1= (int)(temy*130+400);
//System.out.println("x1: "+x1+" y1: "+y1); //颜色根据佚代次数加深
gr.setColor(new Color(i/200,i/100,i/100));
gr.drawLine(x1, y1, x1,y1);
x=temx;
y=temy;
}
}
以上是迭代图像的实现方法。在写这段代码的过程中我们要注意几个要点。首先,坐标通过公式计算后数值很小,需要放大并移到屏幕中央,打点后再进行迭代,再打点,直到循环结束,其中每一次迭代都使颜色加深。此处a,b,c,d的值是我们自己定义的。一旦修改参数值图像就会改变。下面我们来运行一下代码,看一下效果吧。
private double a=-1.2;
private double b=1.6;
private double c=-1;
private double d=-1.5;
private double a=-1.5;
private double b=1.2;
private double c=-1;
private double d=-0.3;
另外我们还可以通过修改颜色的迭代函数来修改颜色效果。
gr.setColor(new Color(i/200,i/100,i/100));
gr.setColor(new Color(i/200,0,i/100));
我们在这里基于第一张图修改了RGB的第二个参数为0;
迭代图像结构相同,但颜色有所改变。
接下来我们探讨一下另一迭代函数。
规则:
1.平面上随机选 A,B,C 三个点。再随机选一个点,记为 P。
2.有一个三面色子,每丢一次,则选中 ABC 三个中一点。 开始游戏: 1.重复丢色子,如果选中 A,则取 A 和 P 的中点 P1,画黑。 2.如果选中 B,则取 B 和 P1 的中点 P2,画黑。
3.如果选中 A,则取 A 和 P2 的中点 P3,画黑。
4.一直重复,如每点一下鼠标,丢 100 次色子。
这个游戏看似有点规律,但是当你画出图片时会发生非常奇妙的东西!
下面是我写的代码:
if("递归".equals(name))
{
int xa=1+(int)(Math.random()*800);
int ya=1+(int)(Math.random()*800);
int xb=1+(int)(Math.random()*800);
int yb=1+(int)(Math.random()*800);
int xc=1+(int)(Math.random()*800);
int yc=1+(int)(Math.random()*800);
int xp=1+(int)(Math.random()*800);
int yp=1+(int)(Math.random()*800);
int turn=1;
System.out.println("xa"+xa+"ya"+ya+"xb"+xb+"yb"+yb+"xc"+xc+"yc"+yc+"xp"+xp+"yp"+yp);
for(int i=0;i<10000;i++)
{
turn=1+(int)(Math.random()*3);
switch(turn)
{
case 1:
xp=(xa+xp)/2;
yp=(ya+yp)/2;
gr.drawLine(xp, yp, xp, yp);
break;
case 2:
xp=(xb+xp)/2;
yp=(yb+yp)/2;
gr.drawLine(xp, yp, xp, yp);
break;
case 3:
xp=(xc+xp)/2;
yp=(yc+yp)/2;
gr.drawLine(xp, yp, xp, yp);
break ;
}
}
因为用到了随机数,每一次递归都会生成不同图像。
那么自然界是不是随机的?给你一个点,是不是能画出整个世界呢?这个问题真的很值得思考。