Week 9 隨堂測驗
姓名 *
學號 *
測驗 1
碎形是相當有趣的題材,參見影片 隨機過程產生的完美圖騰。
(圖一)
考慮以下 Sierpiński triangle 的實作程式碼 (tri.c):

#include <stdio.h>
#define S 78
#define SPACE (char) 32

static int out[S][S] = {0};
int triangle(int i) {
    static int j = 0;
    out[0][S/2] = KK1;
    for (; i < S; i++)
        out[j + KK2][i + KK3] = putchar(SPACE | (out[j][i + KK4] ^ out[j][i]));
    if (++j < 31)
        return triangle(puts(""));
    return 0;
}

int main() {
    return triangle(1);
}

假設終端機至少寬 81 個字元,高 44 個字元,且字型都為等寬等高,上述程式碼在執行時期可輸出下方的 ASCII Art,其中白色前景為 ! (驚嘆號) 字元:
(圖二)
請補完程式碼。

參考資料:

碎形專題 一 從 Cantor 集到碎形
碎形之 Sierpinski 三角形
遞迴、碎形與數學
碎形影像壓縮 / 圖像處理: 碎形壓縮
人家高中就懂這麼多,我們繼續在學店有搞頭嗎?
作答區
KK1 = ? *
25 points
KK2 = ? *
25 points
KK3 = ? *
25 points
KK4 = ? *
25 points
延伸問題
解釋程式運作原理,指出原程式的缺失並強化;
研讀 碎形呈現演算法,嘗試透過 PNG 或 SVG 輸出 Sierpiński triangle 連續延伸的圖片;
改寫上述程式碼為非遞迴,即 iterative 形式;

Submit
Clear form
Never submit passwords through Google Forms.
This form was created inside of National Cheng Kung University. Report Abuse