國
立
交
通
大
學
理學院科技與數位學習學程
碩
士
論
文
科
學
計
算
與
視
覺
化
Scientific Calculation and Visualization
研 究 生:李國寧
指導教授:陳永富 教授
科學計算與視覺化
Scientific Calculation and Visualization
研 究 生:李國寧 Student:Kuo-Ning Li 指導教授:陳永富 Advisor:Yung-Fu Chen
國 立 交 通 大 學 理學院科技與數位學習學程
碩 士 論 文
National Chiao Tung University in partial Fulfillment of the Requirements
for the Degree of Master
in
Degree Program of E-Learning June 2012
Hsinchu, Taiwan, Republic of China
i 科 學 計 算 與 視 覺 化 研 究 生:李 國 寧 指 導 教 授:陳 永 富 教 授
國 立 交 通 大 學 理 學 院 碩 士 在 職 專 班
科 技 與 數 位 學 習 學 程
摘 要 在 本 篇 論 文 , 利 用 mathcad 軟 體 , 呈 現 出 近 代 想 要 許 多 人 想 要 研 究 的 新 興 物 理 相 關 議 題 , 包 含 碎 形 的 圖 形 介 紹 、 繪 製 與 不 同 的 生 成 方 法 , 除 了 碎 形 議 題 之 外 , 波 的 生 成 與 波 和 波 之 間 所 產 生 的 干 涉 圖 案 也 是 引 發 許 多 人 想 要 研 究 的 部 分 。 另 外 , 近 年 來 彈 簧 擺 的 擺 動 軌 跡 圖 案 與 擺 動 軌 跡 渾 沌 現 象 的 討 論 也 是 相 當 重 要 的 概 念 , 經 由 基 本 的 物 理 概 念 , 給 予 不 同 的 初 始 條 件 , 表 現 出 不 同 的 擺 動 軌 跡 圖 案 , 讓 人 可 以 不 用 經 過 實 驗 , 即 可 以 利 用 電 腦 畫 出 軌 跡 ; 此 外 繩 結 的 紐 結 理 論 , 也 是 一 個 有 趣 的 議 題 , 利 用 數 學 的 方 程 式 , 模 擬 用 繩 結 的 交 錯 產 生 許 多 不 同 的 圖 案 。 這 些 議 題 的 背 後 都 有 相 關 的 數 學 方 程 式 , 我 們 可 以 透 過 數 學 軟 體 的 運 算 , 並 呈 現 圖 形 之 生 成 與 變 化 , 可 以 提 供 給 未 來 相 關 的 研 究 參 考 。 關 鍵 詞 : Mathcad、 碎 形 、 準 晶 格 、 彈 簧 擺 、 紐 結 理 論ii
Scient ific C alculatio n and Vis ualization
student:Kuo-Ning Li Advis ors:Dr. Yung- Fu C hen
Degree Progra m of E -Learning College og Science
National C hiao Tung Univers ity
ABSTR AC T
The purpos e of this thes is is to s tudy recently brand new phys ics topic with mathematical software. First of all, we introduce “fractal geometry” by representing the figures and discussing var ious
generating methods. Als o, we focus on the patterns of wave interference, in which we s imulate the quas icrys tal pattern. Second ly, we analyze s pring pendulum witho ut experime nts and s how the swing trajectories varied with init ial condit ions by the mat hcad software only. Finally, we s tudy the knot theory. We can generate many different and interes ting knots with mathe matical for mulas. All the topics can be vis ualized with for mulas and mat he matical software.
iii
誌 謝
在 交 通 大 學 求 學 的 日 子 , 轉 眼 飛 逝 , 忙 碌 、 充 實 卻 不 寂 寞 的 學 習 經 歷 , 成 了 我 最 難 忘 的 回 憶 。 首 先 , 非 常 感 謝 我 的 指 導 教 授 , 陳 永 富 教 授 , 做 學 問 上 , 老 師 總 是 耐 心 、 用 心 地 指 導 我 ; 生 活 中 為 人 處 事 的 道 理 , 老 師 也 適 時 地 建 議 與 協 助 , 老 師 給 予 我 的 不 只 是 知 識 的 豐 收 , 對 學 問 的 熱 情 與 對 學 生 的 關 心 , 同 時 也 給 了 我 很 多 知 識 以 外 的 想 法 , 在 此 向 老 師 致 上 最 高 的 感 謝 。 梁 興 弛 助 教 的 耐 心 協 助 , 令 我 受 益 良 多 , 尤 其 在 我 論 文 上 的 提 醒 與 指 導 , 使 我 可 以 持 續 穩 定 的 進 步 , 也 感 謝 一 同 走 過 這 段 美 好 日 子 的 同 學 們 , 鳳 蘭 、 佳 琪 、 錦 玫 、 瑋 涵 、 長 壽 , 他 們 給 了 我 許 多 的 信 心 與 鼓 勵 。 我 很 榮 幸 可 以 在 這 美 麗 的 校 園 遇 到 一 群 美 好 的 朋 友 , 陪 伴 我 度 過 研 究 所 的 生 活 。 感 謝 我 的 父 母 親 , 無 怨 無 悔 地 不 停 為 我 付 出 , 岳 父 岳 母 的 體 諒,還 有 我 的 太 太 佳 勳,不 論 在 工 作 或 家 庭 上 都 給 我 全 力 的 支 持 , 讓 我 可 以 無 後 顧 之 憂 , 全 力 以 赴 , 努 力 完 成 我 的 碩 士 學 位 , 如 果 沒 有 他 們 , 我 沒 有 辦 法 完 成 我 的 碩 士 學 位 。iv 中 文 摘 要 ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ i 英 文 摘 要 ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ii 誌 謝 ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ iii 目 錄 ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ iv 圖 目 錄 ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ vi 表 目 錄 ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ix
目 錄
一 、 緒 論 ... ... 1 1.1 研 究 動 機 ... ... ... ... ... .... ... ... ... 1 1.2 本 文 架 構 ... ... ... ... ... . ... ... ... 2 二 、 碎 形 圖 案 的 視 覺 化 ... ... ... 4 2.1 樹 木 的 分 枝 ... ... ... ... ... .. ... ... . ... 6 2.2 雪 花 碎 形 ... ... ... ... ... ... ... ... 112.3 J ulia s ets & Manderbrot sets... ... ... ... ... ... 16
2.3.1 J ulia s ets ... ... ... ... ... ... ... ... ... 16 2.3.2 Mandelbrot sets... ... ... ... .. ... ... ... 24 2.4 等 值 線 繪 圖 ... ... ... ... .. .. ... ... ... 27 2.5 經 由 I FS 的 方 式 產 生 碎 形 圖 騰 ... . ... ... ... 29 2.5.1 IFS 概 念 . ... ... ... ... ... ... ... ... ... 29 2.5.2 貼 片 ... ... ... ... ... ... ... ... ... . ... 31 2.5.3 IFS 等 值 線 圖 .. ... ... ... .... ... ... ... ... 38 附 錄 2.1 分 形 樹 M athCad 程 式 碼 ... ... 44 附 錄 2.2 Koch 雪 花 曲 線 M athCad 程 式 碼 ... ... 48
附 錄 2.3 Julia sets M athCad 程 式 碼 ... 50
附 錄 2.4 Mandelbrot sets M athCad 程 式 碼 ... 51
附 錄 2.5 Julia sets 等 值 線 圖 M athCad 程 式 碼 ... 52
附 錄 2.6 IFS 雪 花 M athCad 程 式 碼 ... ... 54
附 錄 2.7 山 脈 圖 形 等 值 線 圖 M athCad 程 式 碼 ... ... 55
v 三 、 波 的 干 涉 圖 騰 之 視 覺 化 ... ... 59 3.1 波 . ... ... . ... ... ... ... ... ... ... 59 3.2 波 的 干 涉 ... ... ... ... ... ... ... ... ... 60 3.3 準 晶 格 圖 騰 ... ... ... ... ... .. ... ... ... ... 62 3.4 波 的 變 化 ... ... ... ... ... ... ... ... ... 64 附 錄 3.1 點 波 源 干 涉 M athCad 程 式 碼 ... ... 66 附 錄 3.2 波 的 干 涉 (時 間 變 動 ) M athCad 程 式 碼 ... ... 67 附 錄 3.3 波 的 干 涉 (隨 時 間 的 變 動 變 化 ) M athCad 程 式 碼 .. ... 68 四 、 彈 簧 擺 的 視 覺 化 ... ... 69 4.1 二 維 空 間 彈 簧 擺 ... ... ... .. ... ... ... 71 4.2 三 維 空 間 彈 簧 擺 ... ... ... .. ... .... ... ... 75 4.3 傅 立 葉 轉 換 ... ... ... ... .. ... ... ... 80 附 錄 4.1 二 維 彈 簧 擺 M athCad 程 式 碼 ... ... 84 附 錄 4.2 彈 簧 擺 三 維 擺 動 M athCad 程 式 碼 ... ... 86
五 、 Knot & Torus 的 視 覺 化 ... ... . ... ... ... 88
5.1 Torus Knot... ... ... ... ... ... ... ... 89
5.2 Decorative Knot... ... .. ... ... ... ... ... ... 93
5.3 Knotted Tori... ... . ... ... .... ... ... ... 95
附 錄 5.1 Torus knot M athCad 程 式 碼 ... ... 97
附 錄 5.2 Decorative Knot M athCad 程 式 碼 ... ... 98
附 錄 5.3 Knotted tori M athCad 程 式 碼 ... ... 99
vi
圖 目 錄
圖 2-1 碎 形 圖 形 acking...…….... 4 圖 2-2 函 數 圖 形 f x
, a0.5, b5... ... ... . ….... 5 圖 2-3 Cantor 三 分 集 ...…... 5 圖 2-4 分 形 樹 ...……... 6 圖 2-5 直 角 坐 標 系 ………...…….. 7 圖 2-6 複 數 平 面 ... ...…….. 8 圖 2-7 分 形 樹 第 一 層 與 分 形 樹 示 意 圖 ... 9 圖 2-8 分 形 樹 第 二 層 示 意 圖 ... … 10 圖 2-9 雪 花 碎 形 圖 ...…….. 11 圖 2-10 Koch 曲 線 示 意 圖 ...……. 11 圖 2-11 Koch 曲 線 第 一 層 示 意 圖 ...… 12 圖 2-12 Koch 曲 線 第 二 層 示 意 圖 ... … 12 圖 2-13 搜 尋 區 塊 示 意 圖 ... ...…….... 17 圖 2-14 區 塊 分 割 示 意 圖 ... …….... 18 圖 2-15 區 塊 編 碼 示 意 圖 ... ….... 19 圖 2-16 二 維 轉 一 維 示 意 圖 ... ...… 19 圖 2-17 [-1,1]平 面 切 成 格 圖 ... 20 圖 2-18 [-1,1]平 面 切 成 格 隨 機 灑 點 圖 ... 20 圖 2-19 不 同𝐶值 Julia sets 圖 形 ...…….... 21 圖 2-20 Julia sets 疊 代 50 次 示 意 圖 ...…….... 22 圖 2-21 Julia sets 疊 代 100 次 示 意 圖 ... …... 22 圖 2-22 Julia sets 疊 代 500 次 示 意 圖 ... 22 圖 2-23 Julia sets 疊 代 1000 次 示 意 圖 ... 23 圖 2-24 Mandelbrot sets 次 方 的 變 化 圖 ... ... 25圖 2-25 (a)Mandelbrot sets (b) Julia sets 相 似 圖 形 ... 26
圖 2-26 Julia sets 等 值 線 圖 ... ... 27
圖 2-27 Mandelbrot sets 等 值 線 圖 ... …. 28
vii 圖 2-29 仿 射 變 換 相 關 變 化 圖 ...…….... 30 圖 2-30 Koch 雪 花 圖 形 貼 片 示 意 圖 ... 32 圖 2-31 利 用 貼 片 灑 2000 點 形 成 Koch 曲 線 ... 34 圖 2-32 利 用 貼 片 灑 10000 點 形 成 Koch 曲 線 ... 34 圖 2-33 利 用 貼 片 灑 50000 點 形 成 Koch 曲 線 ... 34 圖 2-34 利 用 貼 片 灑 100000 點 形 成 Koch 曲 線 ... 35 圖 2-35 IFS 珊 瑚 圖 形 ... ….... 35 圖 2-36 IFS 樹 木 圖 形 ... ... 36 圖 2-37 IFS 羊 齒 葉 圖 形 ... ….... 37 圖 2-38 IFS 羊 齒 葉 擺 動 圖 形 ...…….... 38 圖 2-39 8 8 格 分 割 圖 ...……... 39 圖 2-40 IFS 山 脈 圖 ... ….... 40 圖 2-41 IFS 山 脈 等 值 線 圖 ………... ….. 40 圖 2-42 IFS 山 脈 圖 取 0.25 次 方 連 續 繪 製 1 次 圖 ... 42 圖 2-43 IFS 山 脈 圖 取 0.25 次 方 連 續 繪 製 5 次 圖 ... 42 圖 2-44 IFS 山 脈 圖 取 0.25 次 方 連 續 繪 製 10 次 圖 ... 43 圖 3-1 𝑠𝑖𝑛5𝑥函 數 圖 形 [−𝜋, 𝜋]... 60 圖 3-2 波 的 干 涉 圖 形 ... …. 62 圖 3-3 不 同 數 量 點 波 圓 干 涉 形 成 Quasi-crystal 圖 ... 63 圖 3-4 高 斯 分 布 圖 形 ... 64 圖 3-5 利 用 高 斯 分 布 控 制 波 函 數 干 涉 圖 形 ... 65 圖 4-1 彈 簧 擺 示 意 圖 ... ...….... 69 圖 4-2 彈 簧 擺 擺 動 示 意 圖 ... . 69 圖 4-3 單 擺 受 力 示 意 圖 ... …. 70 圖 4-4 彈 簧 運 動 示 意 圖 ... ... 70 圖 4-5 彈 簧 擺 二 維 平 面 示 意 圖 ... ... 71 圖 4-6 彈 簧 擺 擺 動 軌 跡 (u=4, v𝑥0=1) ... ... ... ... .. 74 圖 4-7 彈 簧 擺 擺 動 軌 跡 (u=7 , v𝑥0=4. 5432)... ... ... 75 圖 4-8 彈 簧 擺 擺 動 軌 跡 等 值 線 圖 (u=6,vxo =1.1001)... 75 圖 4-9 彈 簧 擺 三 維 空 間 示 意 圖 ... 76 圖 4-10 不 同 初 始 條 件 下 的 彈 簧 擺 軌 跡 ... 79
viii 圖 4-11 非 混 沌 彈 簧 擺 軌 跡 ...…... 81 圖 4-12 快 速 傅 立 葉 轉 換 圖 4-11 的 x,z 方 向 結 果 ... 82 圖 4-13 混 沌 彈 簧 擺 軌 跡 ... 82 圖 4-14 快 速 傅 立 葉 轉 換 圖 4-13 的 x,z 方 向 結 果 ... 83 圖 5-1 Torus 形 成 示 意 圖 ...…... 88 圖 5-2 Torus 旋 轉 軸 𝑑 = 示 意 圖 ... 89 圖 5-3 Torus 示 意 圖 ...…….... 89 圖 5-4 ( , 𝑞),𝑞變 化 Torus Knot 圖 ...…. 90 圖 5-5 (2, 𝑞),𝑞變 化 Torus Knot 圖 ... 90 圖 5-6 (3, 𝑞), 𝑞變 化 Torus Knot 圖 ...… 91 圖 5-7 (𝑝, 𝑞) = ( ,3) 𝑎, 𝑑變 化 Torus Knot 圖 ... 91 圖 5-8 mathcad 生 成 圖 (未 旋 轉 )... 92 圖 5-9 mathcad 生 成 圖 投 影 ... 92 圖 5-10 mathcad 生 成 圖 (經 旋 轉 )... 92
圖 5-11 Decorative Knot 相 似 於 Torus knot 的 結 果 ... 93
圖 5-12 Decorative Knot m > n, p − q = 5圖 ... 94
圖 5-13 Decorative Knot 加 入 不 同 參 數 示 意 圖 ... 95
圖 5-14 knotted tori 不 同 粗 細 圖 ... .. 96
ix 表 目 錄 表 2-1 Koch 曲 線 第 一 層 到 第 三 層 角 度 表 ... …...….... 13 表 2-2 Koch 曲 線 角 度 整 理 圖 ... …...….... 14 表 2-3 IFS 仿 射 變 化 表 ... …...….... 31 表 2-4 利 用 貼 片 參 數 形 成 Koch 雪 花 曲 線 表 ... …...….... 33 表 2-5 IFS 生 成 珊 瑚 參 數 表 ... …...….... 35 表 2-6 IFS 生 成 樹 木 參 數 表 ... …...….... 36 表 2-7 IFS 生 成 山 脈 參 數 表 ... …...….... 39
1
第一章 緒論
1.1 研究動機
近代研究中,由於科技進步神速,使得電腦的運算可以一日千里, 因此,有許多人都可以利用電腦來進行設計與創造,還有許多研究人 員會藉由電腦的運算,來呈現出實驗的數據結果,其中實驗數據的產 生雖有決定性的影響,倘若我們可以利用電腦軟體的輔助,將這些實 驗和數據視覺化,並透過視覺化的方式,來呈現出更多不同的實驗樣 貌,甚至經由將實驗過程圖像的呈現,我們可以更直觀,而且更容易 地獲得一些實驗的結果。 在呈現圖像的方式中,許多的呈現方法都需要透過程式設計來產 生,然而程式的撰寫對於一般人來說並不容易入手,因此,我們尋求 一種比較簡單的方式,透過較為直覺式介面結合與標準的數學標記法 的 mathcad 數學軟體,經由軟體中直覺式的介面,我們可以將我們實 驗所需的方程式直接鍵入軟體中,並透過軟體中標準的數學標記法, 我們不需要額外的去學習程式的語言,利用軟體數學介面中,所見即 所得的運算方式,來畫出我們所想要呈現出來的實驗方程式。 近年來,渾沌現象是許多人想要研究的議題,而碎形與渾沌是伴 隨非線性系統研究而出現的,其中在動力行為渾沌的背後,常常會有 靜態的碎形結構,經由了解碎形的許多概念,使我們擁有不同的角度 可以去觀察我們原來的大自然[1],同時也經由碎形幾何的研究,我 們可以嘗試表現出大自然的樣貌,除了碎形之外,仍然有許多的研究 議題都值得討論,其中包含利用波干涉所產生的圖形與在物理學上的 彈簧擺,以及紐結理論,這些議題都具有豐富變化的圖騰與軌跡,因 此,我們要利用這幾個議題為例子,透過 mathcad 軟體來繪製與呈現,2 使得實驗和方程式不僅只是枯燥無味的單一結果,透過視覺化的表現, 讓實驗的過程與結果可以直接地呈現在電腦畫面之中,而往後的研究 者可以經由本文做為基石,輕易的上手來繪製各種圖案。
1.2 本文架構
在本論文將呈現出如何將依些新興的物理議題視覺化,並提供一 些範例與相關的程式碼,讓讀者可以依循設計出自己想要實驗的目標, 內容分為兩大部分,第一部分於第二章時,會介紹碎形的相關概念與 多種圖案,像是樹枝、Koch 雪花、Julia sets、Mandelbrot sets 與 IFS 疊代等,並且利用 mathcad 軟體,透過運算相關的方程式,執行 疊代,產生變化多端的碎形圖騰,並利用第二章繪製碎形圖案的過程 中,藉由灑點、等高線圖等等的方式,來建立一些 mathcad 不同方式 呈現圖形的方法;第二部份於第三章到第五章,利用第二章中所介紹 到的 mathcad 軟體功能與相關的數學概念為基礎,表現出近代物理中, 引人入勝的許多議題,包含第三章中波的干涉與生成,利用波的參數 方程式,經由疊加運算,呈現出相關的波的圖案與波和波之間的干涉 圖騰,在其後加入透過波的干涉所產生的準晶格圖騰的繪製與呈現, 讓波的性質得以完整的呈現;第四章將討論基礎物理中的彈簧擺,藉 由討論彈簧擺的擺動,並且藉由彈簧擺擺動的方程式,經由不同的初 始條件,呈現出差異性極大的軌跡圖案,同時藉由程式的運算,我們 也可以就像是直接在 mathcad 軟體中做實驗,畫出各種條件下的軌跡 圖形,並且探討彈簧擺擺動過程中,配合快速傅立葉轉換,檢驗彈簧 擺軌跡圖形是否呈現出渾沌的情況;在第五章中,討論的是近代常見 的紐結理論,藉由圖形的呈現,我們可以更容易觀察紐結圖形的變化, 同時也可以藉由繪圖,讓過去無法一一繪製呈現的數學方程式,可以3
經由 mathcad 軟體,將這些原本生冷的方程式,可以活潑的呈現方程 式之美。
4
第二章 碎形圖案的視覺化
17 世紀開始,眾所皆知的數學家與哲學家萊布尼茲(Leibniz)在相 當於現今的拓樸學中提到 "the straight line is a curve, any part of
which is similar to the whole",將一條直線視為一條曲線,而且在其中 取任一截斷線段,都會跟像直線一樣,相似於整體;此外他也提及, 經由一個圓形中在最大半徑下填滿三個圓形,在旁邊空隙中也填入較 小的圓形,經由不斷的自我重複程序,產生一個生生不息的圓形,如 下圖 2-1,並稱之為"packing",提出了自我相似性的看法。 圖 2-1 碎形圖形 Packing 在 1872 年,在討論函數的極限與連續性著名的德國數學家維爾
斯特拉斯(Karl Weierstrass)也提出一個方程式 Weierstrass function: 𝑓(𝑥) = ∑∞ 𝑎𝑛cos(𝑏𝑛𝜋𝑥)
𝑛=0 (2.1)
其中0 a 1且 b 為一個正奇數,這是一個處處連續,處處不可微分的
函數,由函數圖形(圖 2-2)也可以發現到,他也具有很高的自我相似 性,同時這個圖形也可以說是第一個被拿來做為碎形研究的圖形。
5
圖 2-2 函數圖形 f x
, a0.5, b5在 1883 年發展構成數學基本理論,集理論(set theory)的德國的數 學家康托爾(Georg Cantor),製造出一個 Cantor 三分集(Cantor ternary
set),在一段線段中刪除中間1 3的部分,並且依序下去,將每一個新的 線段的中間1 3刪去,成為下一個新的圖形,如下圖 2-3 所示[2]。 圖 2-3 Cantor 三分集 在 20 世紀之後,由於電腦科技的進步,人們有機會利用電腦來
f x x6
呈現更多的碎形現象,並且經由曼德布拉特(Mandelbrot)發表”英國的 海岸線有多長?”(“How Long Is the Coast of Britain?)之後,人們對於 碎形開始有了更深的一層定義與認識,也開啟了人們對於碎形的研究 [1]。
2.1 樹木的分枝
大自然中有許多植物為了生長,必須把養分輸送到每一個地方, 而樹木之所以長出許多的分枝,目的就是為了輸送養分,這些自然界 中的景象,巧妙地產生了許多 fractal 的結果[3]。經由電腦軟體的繪 製,我們可以利用 mathcad 軟體,利用數學式子,以分層疊代的方式, 將一條線段,經過平移,縮小、旋轉等方法繪製出像是樹枝的圖形。 一開始我們可以畫出單獨樹枝的形體,圖 2-4(a),接下來經由一些旋 轉與縮小步驟,將原來的樹枝形狀作一些變化。在經過幾次數學運算 或幾次的轉換偏移旋轉之後,即可產生下圖 2-4(b)的圖形[4]。 圖 2-4 分形樹 在 mathcad 軟體中,我們需要經由兩點的位置來繪製點與點連接 的線段,在一般平面中,描述點的座標位置通常使用(𝑥, 𝑦)來表示, Im( )z Re( )z Im( )z Re( )z (a) (b)7 當描述兩線段的旋轉或偏移時,會產生許多相對應的係數,例如,將 點 A(𝑥1, 𝑦1)與點 B(𝑥2, 𝑦2)的連線以點 A 為圓心旋轉θ角至點 C(𝑥3, 𝑦3), 形成 AC 線段,如圖 2-5 所示: 圖 2-5 直角坐標系 若用數學算式描述 AB 和 AC 線段的關係, (𝑥𝑦3− 𝑥1 3− 𝑦1) = (𝑐𝑜𝑠𝜃 −𝑠𝑖𝑛𝜃𝑠𝑖𝑛𝜃 𝑐𝑜𝑠𝜃 ) ( 𝑥2 − 𝑥1 𝑦2 − 𝑦1) (2.2) 則 (𝑥𝑦3 3) = ( 𝑥1 𝑦1) + (𝑐𝑜𝑠𝜃 −𝑠𝑖𝑛𝜃𝑠𝑖𝑛𝜃 𝑐𝑜𝑠𝜃 ) ( 𝑥2− 𝑥1 𝑦2 − 𝑦1) (2.3) 上式是新的點的位置,經由一個2 × 2的矩陣轉換,而得到的結果。 倘若利用複數平面的呈現,令𝑧 = 𝑥 + 𝑖𝑦,經由複數的定義,可使歐 式平面上的點轉換為: 𝑧 = 𝑥 + 𝑖𝑦 = √(𝑥2+ 𝑦2) ( 𝑥 √(𝑥2+𝑦2)+ 𝑖 𝑦 √(𝑥2+𝑦2)) = 𝑟𝑒𝑖𝜙 (2.4) 而新的位置經由旋轉𝜃的𝑧′點為 𝑧′ = 𝑥′ + 𝑖𝑦′ = 𝑟𝑒𝑖𝜃′ = 𝑟𝑒𝑖(𝜙+𝜃) (2.5) 由上述公式可以轉換,令𝑧1 = 𝑥1+ 𝑖𝑦1,𝑧2 = 𝑥2 + 𝑖𝑦2,𝑧3 = 𝑥3+ 𝑖𝑦3,
8 圖 2-6 複數平面 由圖 2-6 可知 𝑧3− 𝑧1 = (𝑧2 − 𝑧1)𝑒𝑖𝜃 (2.6) 則 𝑧3 = 𝑧1+ (𝑧2 − 𝑧1)𝑒𝑖𝜃 (2.7) 由(2.5)式可知,將原來的x, y平面轉呈複數平面之後,在處理旋 轉的角度時,只要乘上𝑒𝑖𝜃即可,若是需要改變原來的長度,只要再 乘上長度的係數即可。因此一開始我們要繪製出將一條由下而上的線 段1 3處向外左開 60 度角,並於線段的 2 3處向右開 60 度角,如圖 2-4(a) 所示。因此我們需要利用點與點之間的連線繪製出𝑎𝑏, 𝑏𝑓, 𝑏𝑐, 𝑐𝑒, 𝑐𝑑, 產生類似樹枝的圖形,示意圖如圖 2-7(a)所示。但是實際畫圖時,我 們必須按照a, b, b, f, b, c, c, e, c, d的順序才可以順利的繪製出圖形。因為 在 mathcad 軟體中,點和點之間的連線是由該點的序數所決定,為了 使圖形中各點的位置可以描述出分形樹的圖形。因此我們必須利用 10 個點來描述這個圖形[4],第一個點到第九個點的相對應位置如下 圖 2-7(b):
9 圖 2-7 分形樹第一層與分形樹示意圖 首先在複數平面上,先定義𝑧0和𝑧9起始兩個點,令𝑧0 = 0,𝑧9 = 𝑒𝑖𝜋2, 來決定分形樹主幹的首末位置,接下來利用𝑧0和𝑧9兩點,定義出中間 的枝節部分,在𝑧̅̅̅̅̅̅的0𝑧9 1 3處向外生長出的 1 3𝑧̅̅̅̅̅̅,並且將新長出的枝節0𝑧9 旋轉𝜋 6,因此先定義𝑧1,在原來𝑧̅̅̅̅̅̅的0𝑧9 1 3處,如式子 2.8 𝑧1 =1 3(𝑧9 − 𝑧0) + 𝑧0 = 2 3𝑧0+ 1 3𝑧9 (2.8) 接下來令𝑧3和𝑧7分別為向外分枝點的位置,𝑧3由原本𝑧1出發的 𝑧5𝑧1向左旋轉𝜋 6,𝑧3 = 𝑧1+ (𝑧5 − 𝑧1)𝑒 𝑖𝜋6,同理,𝑧 7由原本𝑧8出發的𝑧8𝑧9 向左旋轉−𝜋 6,𝑧7 = 𝑧8+ (𝑧9 − 𝑧8)𝑒 𝑖−𝜋6 依序發展出𝑧 1到𝑧8,剩下八個點 的位置表示為: 𝑧1 = 2 3𝑧0+ 1 3𝑧9,𝑧2 = 𝑧1,𝑧4 = 𝑧1,𝑧5 = 1 3𝑧0 + 2 3𝑧9,𝑧6 = 𝑧5,𝑧8 = 𝑧5, 𝑧3 = 𝑧1+ (𝑧5− 𝑧1)𝑒𝑖𝜋6,𝑧7 = 𝑧8 + (𝑧9 − 𝑧8)𝑒𝑖 −𝜋 6 經由定義𝑧0到𝑧9我們 可以利用相同的繪製方式來增加點的位置,要讓每一個線段都可以發 展出更小的線段,換句話說,就是在藉由疊代的方式,產生更多的點 來繪製出更細微的樹枝。接下來定義點𝑧10 = 𝑧0,𝑧19 = 𝑧1,並藉由定 義𝑧10和𝑧19後可以決定𝑧11到𝑧18的點,接下來定義𝑧20 = 𝑧2,𝑧29 = 𝑧3, (a) (b)
10 如法炮製後,經由不斷的定義新的點之後𝑧30 = 𝑧4,𝑧39 = 𝑧5,𝑧40 = 𝑧6, 𝑧49 = 𝑧7,𝑧50 = 𝑧8,𝑧59 = 𝑧9,並經由決定首尾兩點,發展出其他的 枝節,產生第二層的疊代關係,示意圖如下圖 2-8。 圖 2-8 分形樹第二層示意圖 因為實際上所運用的枝節線段為 5 段,所以第一層用了 10 個點 之後,第二層必須用到5 × 10個點來畫出圖形,產生52小段,進而由 此可以推估,在繪製第三層時,延續上述的方法,我們必須再將原來 52小段中的每一段再分成 10 個點,因此必須用到序數為10 + 50 + 250,經過不斷的決定疊代線段的首尾兩點,並且利用首尾兩點的相 對位置決定該層疊代的其他枝節,我們可以利用這樣的方式,不斷地 繪製下去第四、五、六……層,形成茂密的樹枝圖形,相關程式碼如 附錄 2.1。
11
2.2 雪花碎形
在研究 fractal 相關圖形中還有一個著名的圖形,就是 Koch snowflake,如圖 2-9 所示: 圖 2-9 雪花碎形圖 Koch 曲線具有碎形的自我相似性,經由不斷的延伸,產生無窮 無盡的 Koch 曲線。雪花的原始概念為,將原有的直線的1 3處截去,並 將1 3長度的直線,旋轉 π 3之後產生一新線段,接著將原來的 1 3長度旋轉 −2∙𝜋 3 皆在新線段的末端,最後再接回原來的直線,如圖 2-10 所示[5]: 圖 2-10 Koch 曲線示意圖 因此由一正三角形出發,一開始先將第一層三角形先繪製出來,一樣12 是藉由複數平面的觀念,由𝑧0 = 0開始,𝑧1 = 1𝑖 ,𝑧2 = 1𝑖 ∙ 𝑒−23𝑖𝜋, 就可以畫出正三角形,如圖 2-11 圖 2-11 Koch 曲線第一層示意圖 由圖 2-10,觀察可以得到θ1 = −2 3π,θ2 = − 2 3π。接下來我們觀 察第二層的圖 2-12, 圖 2-12 Koch 曲線第二層示意圖 由𝑧0 = 0開始,𝑧1 = 1 3𝑖,𝑧2 = 𝑧1+ 1 3𝑖 ∙ 𝑒 1 3𝑖𝜋,𝑧3 = 𝑧2+ (𝑧2− 𝑧1)𝑒−23𝑖𝜋……,依此類推,得到每次的旋轉角度分別為分θ1 = 1 3𝜋, θ2 = −2 3𝜋,θ3 = 1 3𝜋,θ4 = − 2 3𝜋,θ5 = 1 3𝜋……,角度的旋轉,每四 個一組,可由表 2-1 得知。
13 θ1 = −2 3𝜋,θ2 = − 2 3𝜋 θ1 =1 3𝜋,θ2 = − 2 3𝜋,θ3 = 1 3𝜋,θ4 = − 2 3𝜋, θ5 =1 3𝜋,θ6 = − 2 3𝜋,θ7 = 1 3𝜋,θ8 = − 2 3𝜋, θ9 =1 3𝜋,θ10 = − 2 3𝜋,θ11 = 1 3,θ12 = − 2 3𝜋 θ1 =1 3𝜋,θ2 = − 2 3𝜋,θ3 = 1 3𝜋,θ4 = 1 3𝜋, θ5 =1 3𝜋,θ6 = − 2 3𝜋,θ7 = 1 3𝜋,θ8 = − 2 3𝜋, θ9 =1 3𝜋,θ10 = − 2 3𝜋,,θ11 = 1 3𝜋 , θ12 = 1 3𝜋 ,θ13 = 1 3𝜋 ,θ14 = − 2 3𝜋 , θ15 = 1 3𝜋 ,θ16 = − 2 3𝜋,θ17 = 1 3𝜋, θ18 = −2 3𝜋 表 2-1 Koch 曲線第一層到第三層角度表 經由表 2-1 格觀察可以得到,第二層的θ4等於第一層θ1,同理第 二層的θ8等於第一層θ2,經由這樣的順序,我們可以知道第三層θ4等 於第二層的θ1,綜合上述的邏輯我們可以整理出一個表 2-2。 1 2 θ1 1 2 3 4 5 6 7
14 第 一 層 θ1 θ2 第 二 層 θ1 θ2 θ3 θ4 θ5 θ6 θ7 θ8 θ9 θ10 θ11 第 三 層
[A] θ4 [A] θ8 [A] θ12 [A] θ16 [A] θ20 [A] θ24 [A] θ28 [A] θ32 [A] θ36 [A] θ40 [A] θ44 [A]
表 2-2 Koch 曲線角度整理圖 其中[A] = [1 3𝜋, − 2 3𝜋, 1 3𝜋],經由表 2-2 的規律我們可以判斷出, 除了每四個一個循環之外,下一層的 4 的倍數為上一層的角度,因此 當我們需要作出更高層次的圖形時,需要作一些 4 的次方數的檢驗來 作一些轉換,以上表第三層的θ16來說,我們可以利用 mod 檢驗餘數 的方式來檢驗規律,例如,mod(16,4) = 0,代表 16 除以 4 所得到的 餘數為 0, mod (16 4 , 4) = 0,代表序數 16 先除以 4 之後,再取餘數, 目的是要檢驗是否在轉角處符合上一層的規律,經檢驗後發現還是跟 第一次一樣,於是我們再取mod (16 42, 4) = 1,代表序數 16 先除以42之 後再除以 4,此時我們發現取出來的餘數變成 1,表示 16 所代表的角 色相當於第一層的θ1,如此不停的旋轉與檢驗,經由𝑧𝑘+1 = 𝑧𝑘 + (𝑧𝑘 − 𝑧𝑘−1) ∙ 𝑒𝑖𝜃不斷疊代,可以產生雪花圖形。 以雪花曲線延展五層為例,在程式的撰寫上,第一部為先定義雪 花曲線的發展為五層m ≔ 5,接下來定義第一個點z0: = 0,由z0開始 出發,接下來因為z1的長度會因為層數越多,而使改變一開始的長度 越短,每多一層則長度會變成原來的1 3,若是m層,則初始z1長度為
15 (1 3) 𝑚 ,因此定義z1的為(1 3) 𝑚 ⋅ 𝑒𝑖⋅𝜋2,剩下的部分可以用類似複製的方 式,將序數延伸,即可以產生其他段,因此定義另外兩段的旋轉處之 角度為𝜃4m = −2 3𝜋,θ2∙4m = − 2 3π。 定義k: = 1. . 4m− 1,讓k可以依序數的不同,調整旋轉的次數, 接下來利用mod內定的參數,取出每一次的餘數,例如:mod(𝑎, 𝑏)代 表 𝑎除以𝑏所得到的餘數,由此可以決定當餘數是 1 時旋轉1 3𝜋,餘數 是 2 時旋轉−2 3π,餘數是 3 時旋轉 1 3𝜋,因此定義 𝜃𝑘 = (𝑚𝑜𝑑(𝑘, 4) − 1) ∙ (−𝜋) +1 3𝜋 (2.9) 又當餘數等於 0 時,則用4𝑚來做旋轉度的判斷,𝑚 = 1,2,3,4,5, 來決定旋轉的角度。此外在程式必須做出邏輯的判斷,所以必須要到 內建於 Programing 中的邏輯參數 if,並利用 if 參數做出相關的判斷, 例如: 𝜃𝑘: = 𝑖𝑓 [𝑚𝑜𝑑(𝑘, 4) = 0, (𝑚𝑜𝑑(𝑘, 4) − 1) ∙ (−𝜋) +1 3𝜋, 𝜃𝑘] (2.10) 表示𝜃𝑘在 if 參數的判斷下,若滿足𝑚𝑜𝑑(𝑘, 4) = 0,就輸出 (𝑚𝑜𝑑(𝑘, 4) − 1) ∙ (−𝜋) +13𝜋,否則就輸出原來的𝜃𝑘;因為這樣的判 斷模式下,可以決定每四個序數一次的額外旋轉,當在高層次的圖形 時,隨著 m 的增加,必須在4𝑚的序數上做出旋轉的相關判斷;又 mathcad 在判斷程式時會由上而下辨識,並下方的程式碼會覆蓋上面 的程式定義,所以在定義完一般化的𝜃𝑘之後,可以再利用 if 參數,依 序判斷其他狀況,就可以判斷何時需要旋轉,相關程式碼如附錄 2.2。
16
2.3 Julia sets & Manderbrot sets
在製作 fractal 圖形中,除了上述利用分層方法進行疊代產生碎形 圖形之外,還有兩種特殊的集合,利用集合中的數的位置,來產生美 麗的碎形圖案。在複數系統中,複數z = x + iy,其中x, y為實數,經 由不同的方程式的疊代,可以產生一些特殊的圖形,Julia sets 與 Mandelbrot sets 為當中利用複數疊代方式產生的特殊圖形,也是較為 人所稱道圖形,這兩個圖形都是經由複數不斷的疊代,產生許多自我 相似的圖形。
2.3.1 Julia sets
在複雜的動態背景下,Julia 集為一個經由反覆疊代同樣屬行的函 數,所產生的一個集合,在微小的變動之下,可以呈現出許多巨大的 變化,因此吸引許多人想要了解裡面的結構。 Julia sets是由一個二次映射 = + ,其中 為一個固定值, 而幾乎所有的 都會得到一個映射的結果,並且將所有代入映射條件 中,經反覆疊代之後,所有不發散的點之邊界,稱之為Julia sets,他 的圖形具有碎形的相關性質[6]。 對於z = x + iy來說,x部分為z的實部,y部分為z的虛部,若是 = + ,我們用數對( , )表示,則對於 + 來說, x x y + (2.11) y x y + (2.12) 因此複數 會因為對應到一個固定的 之下 + ,經由不停的疊代會 產生許多不同的結果,而Julia sets就是找出所有的 在一定的疊代次數 下,所有可以收斂的 的點。 其中我們在執行疊代的時候,首先我們要先定義 在一個區間中,17
經由搜尋所有區間中的 值並帶入執行疊代,最後蒐集所有經由
+ 疊代一定次數後,還不會發散的點,而這些點,所形成的
集合,就是Julia sets。所以在執行Julia sets的程式疊代之前,我們要 先決定三個問題,第一我們所要執行的區塊在哪裡?,第二我們所要 執行疊代到底運算到多大時算是發散?以及第三疊代的次數與運算 時間是多少?其中,尤其在疊代次數的多寡尤為重要,除了會影響計 算時間的長短之外,同時也會影像出現的圖形。 接下來我們要先學會找尋區塊內的點的方法,在定義區塊時,我 們會先將一個區塊切割成許多小的區塊,並將我們想要搜尋的 定義 在區塊的中間,如圖2-13所示 圖2-13 搜尋區塊示意圖 並將每一格紅點 ,代入 + ,其中切割的格子數的多寡, 也會影響最後圖形出現的解析度,將區塊內的格子切割的數量越多, 代表圖形可以呈現的解析度越高,反之,則解析度越低,若解析度太 低,在微觀之中,看不到特別的變化,但是有時追求太高的解析度, 容易使程式執行運算的時間過長。 其次,在執行運算的過程中,通常只要|z | ,就會發現當這 些z 值代入 + 中,就會以很快的速度發散,因此我們會定義 一個臨界發散值,一旦超過這個值,就不再執行疊代,但是有時候會
18 因為 值的正負或是疊代的次數,影響到一些臨界的地方的邊界點, 倘若定義發散值太大,其結果也會隨著最後疊代的次數越大而趨向發 散,定義的太小會使運算時間拉長,因此在這個程式中,我們將會定 義當|z | 時,由mathcad軟體執行判定為發散不再執行疊代。 第一點的解析度與第二點的發散大小決定好了之後,最後我們要 確定執行的時間,因為mathcad為一種計算軟體,透過數值的運算, 決定留下最後可以不被發散的點,當我們要在短時間之內得到一個 Julia sets的圖形,我們要將必須將疊代次數減少,或是解析度要變少, 否則隨著疊代的次數越多,解析度越大,將會使圖形產生的過程會越 來越久。 首先定義我們要將圖形切成 格,切割完成之後我們再取每 一小格內部的點,在選取的過程中,由於計算時間上的考量,在計算 二維空間較為費時,於是我們將原有的二維平面上的一個一個區塊, 轉換成一為空間上的區塊,以將原有平面切割成 ,100份的二 維平面轉換為一維空間,如圖2-14所示, 圖2-14 區塊分割示意圖
19 將區塊分別編碼,如圖2-15 圖2-15 區塊編碼示意圖 轉成圖2-16 圖2-16 二維轉一維示意圖 在轉換的過程中,利用mathcad軟體中的參數 與 ,其中 floor參數的意義相當於取高斯數,舉例來說, ( ) = , ( ) = ,而 則是取餘數的方式,藉由 來決定y方向的 值,由 決定x方向的值,以上例來說,若是編號23號,則 ( , ) = ,則知道相當於x = 的位置,又 ( ) + = , 得到相當於y = ,如此在運算上可以將原來的二維平面上的位置轉 成一維的直線來運算,在時間花費上可以節省許多。 在分割完平面之後,將平面上的每一個區塊選擇某一點代入方程 式中,若是都取該區間的中間位置,會使圖形感覺較為制式化,如圖 2-17所示,
20 圖2-17 [-1,1]平面切成 格圖 於是我們可以設定一些隨機性,使得圖形的變化更為豐富,以圖 2-18為例,加入一些隨機性 圖2-18 [-1,1]平面切成 格隨機灑點圖 在定義完區間中取格子的方式之後,我們給予格子內的點 實 部x,虛部 區間[ , ]中,將其平面各切 個點,並利用隨機性,將 點 不要都只有產生在該區塊的中央位置,讓 的個數一共有 個, 的方程式如下所示,
21 = ( ( ) + ( )) + [[ ( , ) + ( ) ] ] ( ) 定義完 之後,我們可以在給定 值與區間範圍之內,先將該區 間範圍切成 = 份,產生 格,成為我們所要產生圖形 的解析度,接著因為程式上需要設定疊代的次數和並利用迴圈方式去 計算,因此先利用「add program line」產生我所需要運算的迴圈,在 此我們設定疊代次數為200次,並且定義發散值 = ,根據方程式即 可畫出Julia sets圖形,相關程式碼如附錄2.3。 經由不同的 值帶入,也會得到不同的結果,分別以 等於 + 如圖2-19(a), + 如圖2-19(b), + 如圖2-19(c), 如圖2-19(d)。 圖2-19 不同 值 Julia sets圖形 在上例中,Julia sets 所留下的點都是可以順利通過200次的疊代,
22 但是在試驗的過程中會發現到,我們所設立的疊代次數是指經過多少 次數的疊代之後,所留下來不會發散的點,因此隨著疊代次數的調整, 圖形也會產生許多不同的變化,以下我們分別由不同的疊代次數的圖 形做一些比較: 疊代50次: 圖2-20 Julia sets 疊代50次示意圖 疊代100次: 圖2-21 Julia sets疊代100次示意圖 疊代500次: 圖2-22 Julia sets疊代500次示意圖
23 疊代1000次: 圖2-23 Julia sets 疊代500次示意圖 由圖2-20到圖2-23可知,有時候疊代的次數太多,反而會造成點數太 少不易辨識圖形的反效果,因此要選擇各個圖形合適的疊代次數是很 重要的,但是到底要如何拿捏疊代的次數,也是一個需要去掌握的問 題,在後面的小節會介紹出不管疊代多少次數,都可以一樣清晰的繪 圖方法。
24
2.3.2 Mandelbrot sets
除了著名的 fractal 圖形中,除了 Julia sets 之外還有一個就是 Mandelbrot sets,其中 Mandelbrot sets 的產生過程和 Julia sets 極為相 似,但兩者取決疊代的方式卻不同。在產生 Mandelbrot sets 圖形時,
疊代的方程式和 Julia sets 相同都是 的二次映射,和 Julia
sets 不同的是,Julia sets 是固定 的情況下去尋找不會發散的 ,而 Mandelbrot sets 則是固定 的情況下,將所有該區間範圍中的值一 一代入 的 中,經過反覆疊代之後,所有不會發散的點集 合,就是 Mandelbrot sets[6]。 經由之前所學的 Julia sets 的方法,我們可以先將想要繪製的區間 加以切割,其中在實數部分範圍為[ ],虛數部分範圍為[ ], 將這兩個範圍切割成 份之後,定義出 𝑖 𝑖 ( ( ) ( )) [[ ( ) ( ) ] ] ( ) 經由決定疊代次數 次與發散值 之後,即可繪製出Mandelbrot sets的圖形,但在繪製的過程中會發現到Mandelbrot sets 和Julia sets 雖有相同的疊代過程,但是圖形的結果卻是大相逕庭,因此在繪製的 過程中,需多注意顯示圖形的邊界,所以我們可以利用加入∆ 與∆ 的 方式,並且讓繪圖的邊界改為[ ∆ ∆ ]與[ ∆ ∆ ], 讓圖形有置中的效果,
25 𝑖 ( ( ) ( )) ∆ [[ ( ) ( ) ] ∆ ] ( ) 讓圖形可以變得更集中於我們所要觀察的地方,相關程式碼如附錄 2.4。
也因為Mandelbrot sets和Julia sets有相似的疊代過程,我們也可以 利用修改方程式的次方的方式,如圖2-24中,繪製了2次方到7次方的 圖形。
26
圖2-24 Mandelbrot sets 次方的變化圖
除了圖2-24的變化之外,我們也可以深入的觀察Mandelbrot sets 在某些點的結構與Julia sets相似[5],分別以
為中心,範圍0.00007的Mandelbrot sets 放大圖,如圖2-25(a) 與 為中心,範圍為0.00049的Julia sets放大 圖,如圖2-25(b)。
27
2.4 等值線繪圖
在繪製上述的兩種集合時,常常會發現因為在 mathcad 軟體的限 制下,在一維空間中沒有辦法繪出一些顏色豐富的圖形,因此我們可 以給予圖形一些高度的變化,並且利用等高線圖形或是曲面圖形繪圖 的方式,讓圖形有更多不同的顏色變化,同時也可以增加許多邊界的 可視性。 因為疊代的次數會影響點是否屬於集合之中,所以疊代次數越高 而會使得圖形上的點數越來越少,難免會產生遺珠之憾,為了避免這 些情形產生,我們可以利用在每一個點的位置上加上在第幾次才發散 的狀況,來做為該點的高度。 舉例來說,我們可以利用該點在疊代時是第幾次被否決的次數來 決定該點的高度,假設我們將每個點都疊代 700 次,若可以疊代 700 次依然在集合的點會獲得 700 的高度,若是疊代第 100 次就發散的點, 將會得到高度 100,如此我們就可以經由高度的變化給予顏色或是亮 暗的差異,讓圖形產生更多改變 如圖 2-26,2-27 所示,相關程式碼 如附錄 2.5。 圖 2-26 Julia set 等值線圖28 圖 2-27 Mandelbrot set 等值線圖 此外,經由清晰化的步驟,我們可以經由不斷放大局部圖形來觀 察細部的圖形變化,如下圖,以(0,0)為圖形的中心點,以 𝐶 = −0.745429 + 0.113008𝑖依不同的放大比例的範圍繪製 Julia sets 圖形,分別以範圍 0.5 如圖 2-28(a),範圍 0.05 如圖 2-28(b), 範圍 0.005 如圖 2-28(c),範圍 0.0005 如圖 2-28(d), 圖 2-28 Julia sets 𝑐 = −0.745429 + 0.113008𝑖 不同範圍等值線圖
29
2.5 經由 IFS 的方式產生碎形圖騰
在繪製碎形圖案中,還有另外一種方法,可以產生碎形圖案。在 數學上,疊代函數系統(iterated function systems 簡稱 IFS),製作出來 的圖形通常具有碎形圖形的自我相似性,因此通常用來繪製 fractal 圖形[5]。而這些製作出來的圖形在二維的計算與繪製中,可以是任 何尺寸的。其中最典型的例子就是史賓斯基三角形(Sierpinski qasket), 經由不斷的收縮,緊密的結合之所產生;而 IFS 碎形形狀是由幾個自 身的形狀,在自身的形狀內也有相同的形體,反覆循環,產生自我相 似性的碎形圖案。
2.5.1 IFS 概念
IFS 起先由 1981 年的 John E. Hutchinson 所提出,並在 Michael Barnsley 的<Fractals Everywhere>[7]書中被大量的推廣運用;在自然 界中,許多的樹葉與蕨類植物的形狀,所呈現出來的結構往往都具有 自我相似性[8],但也因為隨機性的變化之下,往往找不到兩個蕨類 植物的在葉狀體的分支與規模較小的葉片之中形體是完全一樣的,但 是經由 IFS 的不斷疊代下,可以助於幾何建模[9]。
在數學的定義上則為{𝑓𝑖: 𝑋 → 𝑋|𝑖 = 1,2,3, … , 𝑁, 𝑁 ∈ ℕ},是一個在
complete metric space 上的 contraction mappings[10]。
在幾何學上,利用仿射變換(affine transformation),改變原有二維 空間上的角度與長度,利用 IFS 疊代,產生許多自我相似圖形。
利用仿射變換將原來的座標軸做映射進而產生新的座標,將原有 的位置做一個長度、角度和位移的變化,
30 其中, = ( ), = ( ), = ( ), = ( ),係 數 r 代表 x 方向的縮放程度,s 代表 y 方向的縮放程度, 和 則分別 代表 x 和 y 方向的旋轉角度,e 和 f 則為 x 和 y 方向的位移值。 相關的變化如下圖 2-29 所示[9]: 圖 2-29 仿射變換相關變化圖 為了防止不斷疊代的過程中,產生發散的圖形現象,因此在仿射 變換中,有下列限制, : ( , ) → ( , ′) {𝑥′ = 𝑎𝑥 + 𝑏𝑦 + 𝑒 𝑦′ = 𝑐𝑥 + 𝑑𝑦 + 𝑓 = √(𝑥 𝑥 ) (𝑦 𝑦 ) = √(𝑥 𝑥 ) (𝑦 𝑦 )
31 = √[𝑎(𝑥 𝑥 )] [𝑏(𝑦 𝑦 )] + [𝑐(𝑥 𝑥 ) + 𝑑(𝑦 𝑦 )] (𝑥 𝑥 ) (𝑦 𝑦 ) (𝑎 + 𝑐 )(𝑥 𝑥 ) + (𝑏 + 𝑑 )(𝑦 𝑦 ) + 2(𝑎𝑏 + 𝑐𝑑)(𝑥 𝑥 )(𝑦 𝑦 ) 若是此仿射變換是可推定的則基本範圍為 {(𝑎 + 𝑐 ) 1 (𝑏 + 𝑑 ) 1 於是,我們利用一些平面的幾何轉換,如:縮放、旋轉、位移來 改變原來的平面位置,如此若運用於點與點之間的關係,藉由疊代的 方式,即可產生相關的碎形圖形。在 IFS 圖形產生的順序過程中,我 們會以先縮放、在旋轉、後偏移的方式產生下一個疊代的位置,如此, 我們可以利用一個矩陣關係,來建立點和點的關係,下面以 , , , , , 產生一個表格,如表 2-3 表 2-3 IFS 仿射變化表 在之後的製作碎形過程中,我們將利用上面的表格來繪製相關的 碎形圖形。
2.5.2 貼片
碎形圖形是一種較為特殊的幾何圖形,他通常都會依變異程度的 大小具有不同的自我相似性質,而經由不斷的反覆疊代過程中,碎形 圖形的某些部份都會產生相似的特徵圖形,或相似結構的圖案。以數 學的角度來看,若經過不斷的反覆疊代產生的一個收縮性的函數極限32 點集,我們會稱之為吸子(attractor)[5],例如:以 ( ) = 來說, = , = 1經由不斷的反覆疊代,最後會發現這個圖形只有 在兩點跳動,產生兩個吸子;又 ( ) = 為例, = , = 1,經 過不斷的反覆疊代,會發現到 ( )的值將會不斷地朝 0 趨近,而 0 就 是 ( ) = 的吸子。其中,吸子可以為點、有限集合、曲線、或是一 種複印本。. 因為碎形圖形的特殊性,在圖形中可以觀察到許多的規律性,但 是這樣的吸子結構較為複雜,我們稱呼在碎形中的吸子為奇異吸子 (strange attractor),因為經由這樣的吸子,可以產生相同的結構的圖形, 無窮無盡的延伸,不斷的產生相同特徵的圖案,而貼片理論的產生, 目的就是藉由貼片希望產生一些奇異吸子的方向,進而產生不斷延伸 的碎形圖形。 在數學中,貼片理論是將我們之前提到的 IFS 疊代函數系統中的 吸子接近給定的集合中,經由貼片的方法所產生的碎形圖形,將會形 似於初始生成子圖形。 以 Koch 雪花曲線為例,若是用貼片表示,如圖 2-30[5], 圖 2-30 Koch 雪花圖形貼片示意圖
33 並利用 mathacad 軟體中的內建參數 rnd,建立隨機性,讓碎形的 撒點狀況可以因為隨機性使得圖形變得更均勻的分布於畫面中,其中 𝑑(1)代表由[ ,1]之間隨機選出數字,加上參數 ,其中 (𝑥 𝑎)代 表若是𝑥 𝑎則值為 1,反之則為 0,所以當用兩組參數 (𝑥 𝑎 ) (𝑎 𝑥),則代表當𝑎 𝑥 𝑎 時, (𝑥 𝑎 ) (𝑎 𝑥) = 1, 反之則為 0,綜合上述兩點可知道,在四個貼片中,若定義𝑑 = 𝑑(1) 安排由[0,1]中取出隨機數字,並利用參數 (𝑑 ) ( 𝑑 )、 (𝑑 ) ( 𝑑 )、 (𝑑 ) ( 𝑑 )、 (𝑑 ),當乘積 的結果為 1 時才會出現該點,使點分別安排於四個貼片的參數之中, 如此,圖形便可以變得均勻分布於四個貼片之中。 由貼片的形狀可以得知,在單位為1的原始圖形中,由左至右, 其中第一個貼片縮小 後置於原點,第二個貼片縮小 後,並旋轉 , 再將圖形平移至( , )的位置,第三個貼片縮小 後,旋轉 ,並平 移至( ,√ )的位置,第四個貼片則縮小 後,並平移至( , )的位置, 如表 2-4 1 3 1 3 0 0 0 0 1 3 1 3 3 3 1 3 0 1 3 1 3 3 3 1 2 √3 1 3 1 3 0 0 2 3 0 表 2-4 利用貼片參數形成 Koch 雪花曲線表
34 將上述的值輸入程式之後,決定灑入的點數,即可以得到相關的 結果,相關程式碼如附錄 2.6。 灑 2000 點時: 圖 2-31 利用貼片灑 2000 點形成 Koch 曲線 灑 10000 點時: 圖 2-32 利用貼片灑 10000 點形成 Koch 曲線 灑 50000 點時: 圖 2-33 利用貼片灑 50000 點形成 Koch 曲線
35 灑 100000 點時: 圖 2-34 利用貼片灑 100000 點形成 Koch 曲線 由上述的圖形可以發現到,當灑的點數太少時,影像不夠清晰, 但當灑的點數夠多時,即可產生足夠清晰的 Koch 雪花曲線 在此提供額外的一些圖形範例,以珊瑚圖形來說,並建立 , , , , , 表,如表 2-5,最後產生 IFS 圖形,則結果為圖 2-35。 0.6 0.6 0 0 0.12 0 0.5 0.5 4 4 0 0.25 0.5 0.5 4 4 0.5 0.6 表 2-5 IFS 生成珊瑚參數表 圖 2-35 IFS 珊瑚圖形
36 另外,以樹的圖形來說,建立 , , , , , 表,如表 2-6, 則結果為圖 2-36 0.05 0.6 0 0 0 0 0.05 -0.5 0 1 0.6 0.5 4 1 4 1 0 0.6 0.5 0.45 2 1 2 1 0 1.1 0.5 0.55 3 1 3 1 0 1 0.55 0.4 4 1 4 1 0 0.7 表 2-7 IFS 生成樹木參數表 圖 2-36 IFS 樹木圖形 我們也可以利用 IFS 的方式繪製出羊齒葉圖形,首先先建立 , , , , , 表,如表 2-6,則結果為圖 2-37
37 0 0.16 0 0 0 0 0.85 0.85 2.5 1 2.5 1 0 1.6 0.3 0.34 4 1 4 1 0 1.6 -0.3 0.37 5 1 5 1 0 0.44 表 2-6 IFS 生成樹木參數表 圖 2-37 IFS 羊齒葉圖形 甚至我們可以藉由一些貼片參數中, 和 參數很小很小的變動,讓 羊齒葉擺動起來,例如圖 2-38,每隔一張圖便讓 和 不為 0 的參數, 同時增加 0.5 度,如此可以產生許多不同的變化,呈現出類似擺動的 效果。
38 圖 2-38 IFS 羊齒葉擺動圖形
2.5.3 IFS 等值線圖
經由上一節介紹貼片理論以及 IFS 疊代函數產生圖形的產生方 法之後,相信大家已經可以利用數學方程式,或是貼片的方法,來繪 製一些碎形相關的圖形,其中在繪製貼片圖形時,是利用撒點的方式, 讓點根據貼片的旋轉、縮放與偏移,產生碎形,因此在圖形的邊緣, 在視覺上總是讓人感覺有點模模糊糊,只有點的變化,加上 mathcad 的顏色上的限制,變化上較少,所以我們可以利用一些小技巧,增加 一些能見度與顏色上的變化。 在 2-4 章中,我們的方法就是利用給予圖形上的每一個點不同的 高度,並藉由每一個底的高度不同的方式呈現,讓圖形具有一些變化, 進而藉由高度繪製出等高線圖來產生高度變化的顏色。首先我們要先 確定圖形的邊界位置,利用 min 參數找到 x 與 y 的最小值,max 參數 找到 x 與 y 的最大值,並在 x,y 的邊界再多加上一些距離,經由掌握 最大與最小的 x,y 值,使得整張圖形可以完整地呈現,接下來我們要 將圖形切割成 n 份,將整張圖切割 × 格,假設 n 為 80,圖形將切 割成 6400 份,如圖 2-3939 圖 2-39 × 格分割圖 其中 x 方向的每一個單位為ma (𝑥)−𝑚𝑖 (𝑥),同理 y 方向的每一個 單位為ma (𝑌)−𝑚𝑖 (𝑦),接下來我們可以利用邏輯函數來判斷,若是在 IFS 疊代的過程中,x,y 的值有出現在某一個區間中,我們就會給該 區間 1 的值,若沒有出現在該區間中,我們就給他 0 的值,並將我們 給予這些區間的 0,1 值輸入於一個矩陣之中,若是 x,y 的值不斷的出 現於該區間之中,則相對應的矩陣值會越高,如此藉由 x 區間的矩陣 與 y 區間的矩陣相乘,可以得到一個矩陣結果,並由結果顯示出切割 成 6400 塊的區間中,若出現 mathcad 中的 surface plot 圖形中,可以 看見各區間不同的高度。先建立 , , , , , 表,表 2-7 0.5 0.49 0 0 0.2 0 0.5 0.49 0.2 0.51 0.74 0.5 4 0 0 0.74 0.5 4 0 0.48 0.48 表 2-7 IFS 生成山脈參數表
40
所形成的圖形,如圖 2-40 所示
圖 2-40 IFS 山脈圖
繪製完基本的 IFS 圖形後,我們可以利用點的高度,產生類似等 高線的高度的圖形,其中左邊呈現的為 surface plot 圖 2-41(a),右邊 呈現的為 contour plot 圖 2-41(b) 圖 2-41 IFS 山脈等值線圖 如此可以增加一些圖形集中程度與邊界的可視性,同時也可以為原來 單調的顏色產生更多不同的變化,相關程式碼如附錄 2.7。 經由上面的程式來協助計算,我們可以經由給予點高度的方式, 讓圖形增添許多高度的顏色,並呈現出三維空間的效果,同時也可以
41 讓圖形有較多的變化,但是在繪製的過程中,實際上會發現到 mathcad 的計算時間和過程十分冗長,解析度方面也會因為計算時間太長,導 致解析度不能增加得太多,過程中也容易產生程式不穩定的情形,使 得實際操作時,常常出現等待的狀況,也很困難的去轉換相關的結果。 而造成程式計算緩慢原因就在於將剛始疊代的區塊切成二維空間之 後,再將二維空間轉成矩陣才計算繪製圖形,這樣會導致程式計算程 式時間拉得很長。 在繪製山脈圖形得等值線圖程式的前半部分都和繪製平面部分 的方程式相同,在平面圖形程式碼後面部分我們會接續使用之前繪 製 julia sets 的方法,先將圖形的平面範圍先分割成 800 份,使得整 張平面圖分成 × 個區塊,接下來利用𝑧𝑗值的上界與下界再各 加減 0.05 的距離成為整張圖的邊界,如此可以使畫面可以有置中的 效果,再來利用碎形的具有特性,將初始條件稍微修改,即可產生 一些不同的變化,於是我們定義出,當初始值𝑅小於重複繪製次數 N = 3時,則𝑧 = 𝑑(1) + 1𝑖 ∙ 𝑑(1)就會重複產生一個新的初始值, 並經由初始質的改變,在原來的圖形上重新繪製一張新的圖形,在 原來圖形上的每一個點的位置附近產生新的點,再給予每一個點重 複累加的值,使圖形產生高度,並且在最後繪製圖形的程式碼中, 利用次方數的關係,讓圖形的點的高度比例更集中,使圖形更清晰, 相關程式碼如附錄 2.8。
而在前面繪製 Julia sets 和 Manderbrot sets 時,我們將二維空間的 區塊的計算過程利用 floor 參數取商數和利用 mod 參數取餘數的方式, 將原來的二維空間的計算過程轉換成一維空間來處理,同理,在此我 們也可以將原來的二維空間區塊先轉換成一維空間之後,等待程式計 算完成,在繪製圖形時,再將原來一維的結果轉回二維空間,將點的
42 位置描繪在圖形上,再者我們可以利用多次繪製的方式,讓圖形經由 起始點些微的變化,經由連續的疊代過程,產生幾張極為接近的圖形 的點,散佈在同一張圖面上,經由連續的繪製,如此可以增加圖形的 清晰程度,讓圖形的線條呈現更清楚。除此之外,我們可以經由之前 敘述過的方法,先將 x,y 方向的極大值與極小值得點取出後,在邊界 再加上一點點空間,使得圖形可以完整地顯示,在之後的程式碼呈現, 我們會接續之前用複數的實部、虛部分別呈現的做法將 x,y 平面轉換 為𝑧𝑗的方式,並用方程式的方式繪製出有關圖形。 繪製 1 次,取 0.25 次方 圖 2-42 IFS 山脈圖取 0.25 次方連續繪製 1 次圖 繪製 5 次,取 0.25 次方 圖 2-43 IFS 山脈圖取 0.25 次方連續繪製 5 次圖
43
繪製 10 次,取 0.25 次方,
44
附錄 2.1
分形樹 MathCad 程式碼
第一層分形樹程式碼: 𝑧 = 𝑧9 = 𝑒𝑖𝜋2, 𝑧 = 𝑧 + 𝑧9 𝑧 = 𝑧 𝑧 = 𝑧 𝑧5 = 1 3𝑧 + 2 3𝑧9 𝑧 = 𝑧5 𝑧8 = 𝑧5 𝑧 = 𝑧 + (𝑧5 𝑧 )𝑒𝑖𝜋 𝑧7 = 𝑧8 + (𝑧9 𝑧8)𝑒𝑖−𝜋45 第二層分形樹程式碼: k: = . .4 𝑧 (𝑘 ): = 𝑧 𝑘 𝑧9 (𝑘 )∗ : = 𝑧 𝑘 𝑧 (𝑘 )∗ ≔2 3𝑧 (𝑘 )∗ + 1 3𝑧9 (𝑘 )∗ 𝑧 (𝑘 )∗ : = 𝑧 (𝑘 )∗ 𝑧 (𝑘 )∗ : = 𝑧 (𝑘 )∗ 𝑧5 (𝑘 )∗ : = 1 3𝑧 (𝑘 )∗ + 2 3𝑧9 (𝑘 )∗ 𝑧 (𝑘 )∗ = 𝑧5 (𝑘 )∗ 𝑧8 (𝑘 )∗ = 𝑧5 (𝑘 )∗ 𝑧 (𝑘 )∗ = 𝑧 (𝑘 )∗ + (𝑧5 (𝑘 )∗ 𝑧 (𝑘 )∗ )𝑒𝑖𝜋 𝑧7 (𝑘 )∗ = 𝑧8 (𝑘 )∗ + (𝑧9 (𝑘 )∗ 𝑧8 (𝑘 ∗ ))𝑒𝑖−𝜋 0.4 0.2 0 0.2 0.4 0 0.2 0.4 0.6 0.8 1 1 0 Im z( ) 0.5 0.5 Re z( )
46 第三層分形樹程式碼: k ≔ . .24 𝑧 (𝑘 )∗ 5 : = 𝑧 𝑘 𝑧9 (𝑘 )∗ 5 : = 𝑧 𝑘 𝑧 (𝑘 )∗ 5 ≔ 2 3𝑧 (𝑘 )∗ 5 + 1 3𝑧9 (𝑘 )∗ 5 𝑧 (𝑘 )∗ 5 : = 𝑧 (𝑘 )∗ 5 𝑧 (𝑘 )∗ 5 : = 𝑧 (𝑘 )∗ 5 𝑧5 (𝑘 )∗ 5 : =1 3𝑧 (𝑘 )∗ 5 + 2 3𝑧9 (𝑘 )∗ 5 𝑧 (𝑘 )∗ 5 = 𝑧5 (𝑘 )∗ 5 𝑧8 (𝑘 )∗ 5 = 𝑧5 (𝑘 )∗ 5 𝑧 (𝑘 )∗ 5 = 𝑧 (𝑘 )∗ 5 + (𝑧5 (𝑘 )∗ 5 𝑧 (𝑘 )∗ 5 )𝑒𝑖𝜋 𝑧7 (𝑘 )∗ 5 𝑧8 (𝑘 )∗ 5 + (𝑧9 (𝑘 )∗ 5 𝑧8 (𝑘 )∗ ) 5 )𝑒𝑖−𝜋
47 第四層分形樹程式碼: k ≔ . .124 𝑧 (𝑘 )∗ 5 5 : = 𝑧 𝑘 5 𝑧9 (𝑘 )∗ 5 5 : = 𝑧 𝑘 5 𝑧 (𝑘 )∗ 5 5 ≔2 3𝑧 (𝑘 )∗ 5 5 + 1 3𝑧9 (𝑘 )∗ 5 5 𝑧 (𝑘 )∗ 5 5 : = 𝑧 (𝑘 )∗ 5 5 𝑧 (𝑘 )∗ 5 5 : = 𝑧 (𝑘 )∗ 5 5 𝑧5 (𝑘 )∗ 5 5 : =1 3𝑧 (𝑘 )∗ 5 5 + 2 3𝑧9 (𝑘 )∗ 5 5 𝑧 (𝑘 )∗ 5 5 : = 𝑧5 (𝑘 )∗ 5 5 𝑧8 (𝑘 )∗ 5 5 : = 𝑧5 (𝑘 )∗ 5 5 𝑧 (𝑘 )∗ 5 5 ≔ 𝑧 (𝑘 )∗ 5 5 + (𝑧5 (𝑘 )∗ 5 5 𝑧 (𝑘 )∗ 5 5 )𝑒𝑖𝜋 𝑧7 (𝑘 )∗ 5 5 ≔ 𝑧8 (𝑘 )∗ 5 5 + (𝑧9 (𝑘 )∗ 5 5 𝑧8 (𝑘 )∗ ) 5 5 )𝑒𝑖−𝜋
48
附錄 2.2
Koch 雪花曲線 MathCad 程式碼
m: = 5 𝑧 : = z : = ( )𝑚⋅ 𝑒𝑖⋅𝜋2 𝜃 𝑚: = 𝜋 𝜃 ∙ 𝑚: = 𝜋 k: = 1. . 4m 1 𝜃𝑘: = (𝑚𝑜𝑑(𝑘, 4) 1) ∙ ( 𝜋) +1 3𝜋 𝜃𝑘: = 𝑖𝑓 [𝑚𝑜𝑑(𝑘, 4) = , (𝑚𝑜𝑑 (𝑘 4, 4) 1) ∙ ( 𝜋) + 1 3𝜋, 𝜃𝑘] 𝜃𝑘: = 𝑖𝑓 [𝑚𝑜𝑑(𝑘, 4) = , (𝑚𝑜𝑑 (𝑘 4 , 4) 1) ∙ ( 𝜋) + 1 3𝜋, 𝜃𝑘] 𝜃𝑘: = 𝑖𝑓 [𝑚𝑜𝑑(𝑘, 4) = , (𝑚𝑜𝑑 (𝑘 4 , 4) 1) ∙ ( 𝜋) + 1 3𝜋, 𝜃𝑘] 𝜃𝑘: = 𝑖𝑓 [𝑚𝑜𝑑(𝑘, 4) = , (𝑚𝑜𝑑 (𝑘 4 , 4) 1) ∙ ( 𝜋) + 1 3𝜋, 𝜃𝑘] 𝜃𝑘 𝑚: = 𝜃𝑘 𝜃𝑘 ∙ 𝑚: = 𝜃𝑘 k: = 1. .3 ∙ 4m 1 𝑧𝑘 = 𝑧𝑘 + (𝑧𝑘 𝑧𝑘− ) ∙ 𝑒𝑖𝜃𝑘50
附錄 2.3
Julia sets MathCad 程式碼
: = : = 1. 5 N: = ≔ . 4542 + .113 ∗ 1 : = 2 : = . . N 1 𝑧 𝑖 = ( (𝑖 ) + 𝑑(1) 2 ) ∙ 2𝑎 𝑎 + 𝑖 ∙ [[𝑚𝑜𝑑(𝑖, ) + 𝑑(1) 2 ] ∙ 2𝑎 𝑎] (𝑧 , , ) = | | | | 𝑖 𝑖 𝑒 𝑖 𝑎 (𝑧 ) | | | 𝑧 𝑖 𝑓𝑜 ∈ . .2 | 𝑗 ( 𝑗) + + 1 𝑏 𝑒𝑎𝑘 𝑖𝑓 | 𝑗 | 𝑧 𝑖 𝑖𝑓 | | 𝑖 𝑖 + 1 𝑧 z: = (𝑧 , , )
51
附錄 2.4
Mandelbrot sets MathCad 程式碼
: = 3 N: = 2 N1: = ≔ 1.5 : = 1 ∆ ≔ .25 ∆ ≔ z : = N1: = ≔ . . N1 1 𝑖 = ( ( 𝑖 ) + 𝑑(1) 2 ) ∙ 2𝑎 𝑎 + ∆ + 𝑖 ∙ [[𝑚𝑜𝑑(𝑖, ) + 𝑑(1) 2 ] ∙ 2𝑏 𝑏 + ∆ ] (𝑧 , , 𝑁, ) = | | | | 𝑖 𝑖 𝑒 𝑖 𝑎 ( ) | | | z 𝑓𝑜 ∈ . . 𝑁 1 | 𝑗 ( 𝑗) + + 1 𝑏 𝑒𝑎𝑘 𝑖𝑓 | 𝑗 | 𝑖 𝑖𝑓 | | 𝑖 𝑖 + 1 : = (𝑧 , , 𝑁, )
52
附錄 2.5
Julia sets 等值線圖 MathCad 程式碼
: = N: = : = 1.5 : = 1 N1: = ≔ . 4542 + .113 ∗ 1 : = 2 : = . . N 1 𝑚𝑖: = 𝑧 𝑖 = ( (𝑖 ) + 𝑑(1) 2 ) ∙ 2𝑎 𝑎 + 𝑖 ∙ [[𝑚𝑜𝑑(𝑖, ) + 𝑑(1) 2 ] ∙ 2𝑏 𝑏] (𝑧 , 𝑚, , 𝑁, ) = | | | | 𝑖 𝑖 𝑒 𝑖 𝑎 (𝑧 ) | | | 𝑧 𝑖 𝑓𝑜 ∈ . .2 | 𝑗 ( 𝑗) + + 1 𝑏 𝑒𝑎𝑘 𝑖𝑓 | 𝑗 | 𝑚𝑖 𝑧 𝑖 𝑖𝑓 | | 𝑖 𝑖 + 1 𝑎 𝑚𝑒 (𝑧 , 𝑚) z: = (𝑧 , 𝑚, , 𝑁, ) Nm ( ),𝑚 (𝑖, )𝑖 : = (z𝑖, )
53
54
附錄 2.6
IFS 雪花 MathCad 程式碼
N ≔ 5 ≔ . . N 𝑥 : = 𝑦 ≔ 𝑑 ≔ 𝑑(1) ≔ 1. .4 ≔ : = 𝜃 : =0 : =0 𝑒 : = 𝑓: = : = : = 𝜃 : = : = 𝑒 : = 𝑓 : = : = : = 𝜃 : = : = 𝑒 : = 𝑓 : =√ : = : = 𝜃 : =0 : =0 𝑒 : = 𝑓 : = 𝑖: = 𝑖 4 (𝑥 𝑦 ) = ∑ [( 𝑖 ∙ 𝑐𝑜 (𝜃𝑖) ∙ 𝑖 ( 𝑖) 𝑖 ∙ 𝑖 (𝜃𝑖) 𝑖 ∙ 𝑐𝑜 ( 𝑖) ) ∙ ( 𝑥 𝑦 ) + ( 𝑒 𝑓𝑖)] ∙ 𝑖 (𝑑 𝑖− ) ( 𝑖 𝑑 )55
附錄 2.7
山脈圖形等值線圖 MathCad 程式碼
N ≔ 5 j ≔ . . N 𝑥𝑗 ≔ 𝑦𝑗 ≔ 𝑑𝑗 ≔ 𝑑(1) ≔ 1. .4 ≔ .5 : = .4 𝜃 : =0 : =0 𝑒 : = .2 𝑓 : = ≔ .5 : = .4 𝜃 : = : = 𝑒 : = .2 𝑓 : = .51 ≔ . 4 : = .5 : = : = : = : = : = . 4 : = .5 : = − : =0 : = .4 : = .4 𝑖: = 𝑖 4 ( j j ) = ∑ [( i ∙ ( i) ∙ ( i) i∙ ( i) i ∙ ( i)) ∙ ( j j) + ( i i)] ∙ i ∙ ( j i− ) ( 𝑖 𝑑𝑗) Xm : = m (𝑥) . 5 Xm : = m (𝑥) + . 5 Ym : = m (𝑦) . 5 Ym : = m (𝑦) + . 5 ≔ t ≔ . . m ≔ . .56 𝑋𝑡: = 𝑡(𝑋𝑚𝑎 𝑋𝑚𝑖) + 𝑋𝑚𝑖 𝑌𝑚: =𝑚(𝑌𝑚𝑎 𝑌𝑚𝑖) + 𝑌𝑚𝑖 t ≔ 1. . m ≔ 1. . 𝐴1𝑡,𝑗: = [(𝑋𝑡 ≥ 𝑥𝑗 ≥ 𝑋𝑡− ), 1, ] 𝐴2𝑗,𝑚: = [(𝑌𝑚 ≥ 𝑦𝑗 ≥ 𝑌𝑚− ), 1, ] A: = A1 ∙ A2 𝐵 ,𝑚: = (𝐴 ,𝑚) coutour plot surface plot
57
附錄 2.8
山脈等值線圖清晰化 MathCad 程式碼
N ≔ 5 j ≔ . . N 𝑥𝑗: = 𝑦𝑗 ≔ 𝑑𝑗 ≔ 𝑑(1) ≔ 1. .4 ≔ .5 : = .4 𝜃 : =0 : =0 𝑒 : = .2 𝑓 : = : = .5 : = .4 𝜃 : = : = 𝑒 : = .2 𝑓 : = .51 : = . 4 : = .5 𝜃 : = : = 𝑒 : = 𝑓 : = : = . 4 : = .5 𝜃 : = − : =0 𝑒 : = .4 𝑓: = .4 𝑖: = 𝑖 4 (𝑥𝑗 𝑦𝑗 ) = ∑ [( 𝑖 ∙ 𝑐𝑜 (𝜃𝑖) ∙ 𝑖 ( 𝑖) 𝑖 ∙ 𝑖 (𝜃𝑖) 𝑖 ∙ 𝑐𝑜 ( 𝑖) ) ∙ ( 𝑥𝑗 𝑦𝑗) + ( 𝑒𝑖 𝑓𝑖)] ∙ 𝑖 (𝑑𝑗 𝑖− ) ( 𝑖 𝑑𝑗) 𝑧𝑗: = 𝑥𝑗 + 1𝑖 ∗ 𝑦𝑗 Xm : = m (𝑅𝑒(𝑧)) . 5 Xm : = m (𝑅𝑒(𝑧)) + . 5 Ym : = m (𝐼𝑚(𝑧)) . 5 Ym : = m (𝐼𝑚(𝑧)) + . 558 IL ( , , 𝜃, 𝜙, 𝑒, 𝑓, , 𝑁, , 𝑋𝑚𝑖, 𝑋𝑚𝑎, 𝑌𝑚𝑖, 𝑌𝑚𝑎, ) ≔ ⌊ 𝑅 𝑖 𝑒 𝑅 𝑁 ⌊ 𝑧 𝑑(𝑎) + 1𝑖 ∗ 𝑑(𝑎) 𝑓𝑜 ∈ . . 1 ⌊ 𝑞𝑗 𝑑(1) 𝑧𝑗 ∑ ⌊ [( 𝑘 ∙ 𝑐𝑜 (𝜃𝑘) ∙ 𝑅𝑒(𝑧𝑗) 𝑘 ∙ 𝑖 (𝜙𝑘) ∙ 𝐼𝑚(𝑧𝑗)) + 𝑒𝑘] + (( 𝑘 ∙ 𝑖 (𝜃𝑘) ∙ 𝑅𝑒(𝑧𝑗) + 𝑘 ∙ 𝑐𝑜 (𝜙𝑘) ∙ 𝐼𝑚(𝑧𝑗)) + 𝑓𝑘) ∙ 1𝑖] ∙ (𝑑𝑗 𝑖− ) ( 𝑖 𝑑𝑗) 𝑘 𝑘 𝑓 𝑜𝑜 (𝑅𝑒(𝑧𝑗 ) 𝑋𝑚𝑖 𝑋𝑚𝑎 𝑋𝑚𝑖 ∙ ) ∙ + 𝑓 𝑜𝑜 ( 𝐼𝑚(𝑧𝑗 ) 𝑌𝑚𝑖 𝑌𝑚𝑎 𝑌𝑚𝑖 ∙ ) 𝑘 𝑘 𝑅 𝑅 + 1 I: = IL ( , , 𝜃, 𝜙, 𝑒, 𝑓, , 5, , 𝑋𝑚𝑖, 𝑋𝑚𝑎, 𝑌𝑚𝑖, 𝑌𝑚𝑎, ) 𝑁𝑚 ( ),𝑚 (𝑖, )𝑖 : = (𝐼𝑖) . 5
59