|
蕨葉曲線的遞迴繪圖必須呼叫繪圖函式本身三次,所以較為複雜一些,先看看蕨葉曲線的基本圖案,如下所示:

這個基本圖案主要由一個主幹與兩個分枝組成,而遞迴繪圖的方向主要就是由這三個部份開始,如下所示:

如果只看主幹的遞迴部份,就可以大致看出蕨葉的骨架了,如下所示:

分枝的部份即是這個骨架的不斷縮小繪製而成,而遞迴停止的條件是看蕨葉分枝最小長度設定為多少。
以下是Java所撰寫的參考程式:
package onlyfun.caterpillar.graphics.recursive; import java.awt.Color; import java.awt.Graphics; import javax.swing.JApplet; import onlyfun.caterpillar.graphics.Turtle; public class FernCurve extends JApplet { private Turtle t; public void init() { t = new Turtle(); setBackground(Color.black); } public void fern(double leng, double min, double k1, double k2, Turtle t) { t.move(leng); if(leng > min) { t.turn(70.0); fern(k2*leng, min, k1, k2, t); t.turn(-71.0); t.move(k1*leng); t.turn(-69.0); fern(k1*k2*leng, min, k1, k2, t); t.turn(68.0); fern(k1*k1*leng, min, k1, k2, t); t.turn(1.0); t.warp(-k1*leng); t.turn(1.0); } t.warp(-leng); } public void paint(Graphics g) { g.setColor(Color.yellow); t.setGraphics(g); t.window(0, 0, getSize().width, getSize().height); t.view(0, 0, getSize().width, getSize().height); t.setpoint(300, 50); t.setangle(90.0); fern(30, 0.1, 0.9, 0.3, t); } }
 |