From Gossip@caterpillar

Computer Graphics: 樹木曲線

 

 


樹木曲線的1次、2次與3次繪圖如下所示:


其中每一次遞迴所使用的leng、angle與branch三個參數如1次樹木曲線所示,這三個參數適當的調整,就可以繪製出不同形狀的樹木結構,而不一 定要遵守一定的比例或規則。

下面是樹木曲線的Java演算程式:

  • TreeCurve.java
package onlyfun.caterpillar.graphics.recursive;

import onlyfun.caterpillar.graphics.Turtle;
import java.awt.*;
import javax.swing.JApplet;

public class TreeCurve extends JApplet {
private Turtle t;

public void init() {
t = new Turtle();

setBackground(Color.black);
}

public void tree(int n, double x0, double y0,
double leng, double angle, double branch,
double scale1, double scale2, Turtle t) {

if(n == 0)
return;

t.setpoint(x0, y0);
t.setangle(angle);
t.move(leng);
// Turtle 目前的位置
x0 = t.LPX;
y0 = t.LPY;

tree(n-1, x0, y0, leng*scale1, angle+branch, branch,
scale1, scale2, t);
tree(n-1, x0, y0, leng*scale2, angle-branch, branch,
scale1, scale2, t);
}

public void paint(Graphics g) {
g.setColor(Color.yellow);

double leng = 100.0, // 分枝長度
angle = 90.0, // 分枝與地面的夾角
branch = 20.0; // 分枝的分岐角

t.setGraphics(g);
t.window(0, 0, getSize().width, getSize().height);
t.view(0, 0, getSize().width, getSize().height);

tree(8, 200.0, 50.0, leng, angle, branch, 0.7, 0.7, t);
}
}



如果將遞迴時的參數改為以下(您可以試試不同的參數),可以繪製出不同的樹木結構:
tree(8, 200.0, 50.0, leng, angle, branch, 0.8, 0.6, t);