test10 畫出 A幾何圖 B移動轉動 C簡單遞迴 D隨機遞迴

Moderators: MtnViewJohn, chris, mtnviewmark

Post Reply
Sam Suan Chen
Posts: 34
Joined: Thu Mar 11, 2010 5:33 am
Location: 龍潭 32545 Taiwan
Contact:

test10 畫出 A幾何圖 B移動轉動 C簡單遞迴 D隨機遞迴

Post by Sam Suan Chen »

/* CFDG 範例 10 */
# 定義規則 test10 畫 A幾何圖 B移動轉動 C簡單遞迴 D隨機遞迴
startshape test10
rule test10{ TITLES{} // 畫出 ABCD 四個字母
A{} // 左上角 畫幾何圖
B{x 10} // 右上角 移動轉動
C{y -10} // 左下角 簡單遞迴
D{x 10 y -10} // 右上角 隨機遞迴
}
#########################################
rule A { # 畫幾何圖
SQUARE{s 3 y 5 x .5} // 在 x .5 y 5 畫邊長為 3 的正方形
CIRCLE{x 6 y 5 s 3} // 在 x 6 y 5 畫直徑為 3 的圓形
TRIANGLE{x 4 y 2 s 3} // 在 x 4 y 2 的 3x3 框畫正三角形
SHAPES{y 1 s 3} // 在 x 0 y 1 的 3x3 框畫自訂組合圖
}
rule SHAPES{ # 重疊的幾何圖形
SQUARE{} // 黑色正方形
CIRCLE{b .4 s .95} // 深灰圓形內接
TRIANGLE{b .6 s .85} // 中灰三角形內接
TRIANGLE{r 60 b .8 s.85}// 淺灰倒立三角形內接
}
#########################################
rule B{ # 移動轉動
SQUARE{} // 在 0,0 畫黑色正方形 (左下角)
SQUARE{x 2 y 6} // 在 3,7 畫黑色正方形
SQUARE{x 4 y 6 r 45} // 在 5,7 畫轉 45 度黑色正方形
SQUARE{x 2 y 4 s .7} // 在 3,5 畫黑色小正方形
SQUARE {x 4 y 4 b .5} // 在 5,5 畫灰色正方形
SQUARE {x 6 y 5 r 45 s .7 b .7} // 在 7,6 畫轉 45 度灰色正方形
FOURSQUARE{x 5 y 1 s .2 r 10} // 在 5,1 畫轉 10 度組合圖
}
rule FOURSQUARE { # 組何圖形
SQUARE {x 0 y 0 s 5 2} // 左下長方形
SQUARE {x -.5 y 5 s 2 4} // 左上長方形
SQUARE {x 4.5 y 5.5 s 3} // 右上正方形
SQUARE {x 5 y 0 s 2} // 右下正方形
}
#########################################
rule C {# 簡單遞迴
SPIRAL { x 0 y 3 }
}
rule SPIRAL # 螺旋
{ CIRCLE { s 0.5 }
SPIRAL { y 0.2 rotate -3 s 0.995 }
# 圖形向上偏移轉角並縮小
# 畫到太小看不見時自動結束遞迴
}
#########################################
rule D { # 隨機遞迴
TREE {x 1} TREE {x 4} # y 0 為預設
TREE {x 1 y 4} TREE {x 4 y 4}
# 四棵樹看起來截然不一樣
}
rule TREE 20 { # 畫樹的第一個規則 (隨機比重 20)
CIRCLE { s 0.25 }
TREE { y 0.1 s 0.97 }
}
rule TREE 1.5 { # 畫樹的第二個規則 (隨機比重 1.5)
BRANCH { } # 畫枝
}
# 隨機比重 大的規則較多被引用
rule BRANCH { # 畫枝的規則
BRANCH_LEFT {} # 畫左枝
BRANCH_RIGHT {}} # 畫右枝

rule BRANCH_LEFT { # 畫左枝規則1 (隨機比重預設為 1)
TREE { r 10 }} # 轉 10 度遞迴畫樹
rule BRANCH_LEFT { # 畫左枝規則2
TREE { r 25 }} # 轉 25 度遞迴畫樹
rule BRANCH_LEFT 10 { # 畫左枝規則3 (隨機比重 10)
TREE { r 40 }} # 轉 40 度遞迴畫樹
rule BRANCH_LEFT {} # 畫左枝規則4 (結束遞迴)

rule BRANCH_RIGHT { # 畫右枝規則1
TREE { r -10 }} # 轉 -10 度遞迴畫樹
rule BRANCH_RIGHT { # 畫右枝規則2
TREE { r -25 }} # 轉 -25 度遞迴畫樹
rule BRANCH_RIGHT 10 { # 畫右枝規則3 (隨機比重 10)
TREE { r -40 }} # 轉 -40 度遞迴畫樹
rule BRANCH_RIGHT {} # 畫右枝規則4 (結束遞迴)

include i_pix.cfdg
# 這 "include" 宣告會載入檔案中的規則
# (忽略其中的 startshape 宣告)

rule TITLES { # 在四個位置畫出不同字母
A_5by5 { y 7.5 } B_5by5 { x 10 y 7.5 }
C_5by5 { y -2 } D_5by5 { x 10 y -2 }
}
Attachments
test10.jpg
test10.jpg (34.79 KiB) Viewed 39351 times

Post Reply