天天看點

Java---分形與遞歸

利用Java的畫圖闆,可以創造出很多有趣的圖形,利用幾組簡單的公式和幾個點便可以完成。是不是很簡單呢?

分形的思想較為簡單,隻需要了解相應的函數便可以繪出(至于那些公式是怎麼來的,是那些數學家們的事了)。

第一組公式:

Java---分形與遞歸
Java---分形與遞歸
Java---分形與遞歸
Java---分形與遞歸
Java---分形與遞歸

第二組公式:

Java---分形與遞歸

利用這一組公式,可以畫出樹和樹葉的形狀,隻要向其中傳遞不同的參數就可以了。

Java---分形與遞歸

看到那顆彎彎的樹葉了沒有?畫那片樹葉要用到産生不同機率的随機數。

假設我們要産生的随機數為1,2,3;它們産生的機率分别為0.5,0.4,0.1;

我們首先産生1-10的随機數n,當n>5時,産生1;當1<n<5時,産生2;當n=1時,産生1;這樣,就相當于産生了不同機率的随機數。

何為遞歸?遞歸就是在本方法裡面調用本方法。一個簡單使用遞歸的例子就是求階乘。

Java---分形與遞歸

上面的圖形就是用遞歸畫出來的,源代碼如下:

public void unique_5(int n,int x0,int y0,int dx,int dy,java.awt.Graphics g){
		if(n==0)
			return;
		((java.awt.Graphics) g).setColor(cl);
		int x1,y1,x2,y2;
		x1=x0+dx;
		x2=x0-dx;
		y1=y0+dy;
		y2=y0+dy;
		g.drawLine(x1, y1, x2, y2);
		g.drawLine(x0, y0, x2, y2);
		g.drawLine(x0, y0, x1, y1);

	g.drawLine((x0+x1)/2, (y0+y1)/2, (x0+x2)/2, (y0+y1)/2);
	g.drawLine((x0+x1)/2, (y0+y1)/2, (x1+x2)/2, y2);
	g.drawLine((x1+x2)/2, y2, (x0+x2)/2, (y0+y1)/2);
	System.out.println(n);
	unique_5(n-1,x0,y0,dx/2,dy/2,g);
	unique_5(n-1,(x0+x1)/2,(y0+y1)/2,dx/2,dy/2,g);
	unique_5(n-1,(x0+x2)/2,(y0+y2)/2,dx/2,dy/2,g);
}