2012年2月1日 星期三

Advanced BASIC in Charming FORTH

Advanced BASIC in Charming FORTH


曾慶潭 Ching-Tang Tseng
ilikeforth@gmail.com
Hamilton, New Zealand
2 February 2012


在迷人的 Forth (Charming Forth)系統中,安裝先進的 BASIC (Advanced BASIC)式程式功能,就稱為 ABC Forth 。它能清楚的表達求解高深數學問題的程式意義,本文以 ABC Forth 系統展示高深的 Mandelbrot 圖形。

Mandelbrot 繪圖,以非傳統數學方式,表達自然現象,它能精簡顯示『碎形幾何』(Fractal geometry)表達複雜自然現象的意義。

碎形幾何強調自然結構存在著不平滑(Roughness)現象,但無論從宏觀或微觀的領域觀察自然結構,卻都呈現出自我相似的性質。碎形幾何對解決許多艱深的自然科學問題,如天文問題或流體力學問題,有過實質上的貢獻。

電腦性能不夠發達以前,想隨心所欲的完成 Mandelbrot 繪圖,有點困難。電腦性能大肆改善後的今天,如果程式語言性能不夠優秀,想迅速確實的繪製出 Mandelbrot 圖形,仍然不易完成。

我創作了 ABC Forth 系統,必須能夠解決這種困擾,還得辦到別人所無法辦到的特性,性能才算得上優越。這一次,我把問題精簡到最簡程度,也把程式簡化到能讓高中生看懂、會用的程度,這是 ABC Forth 系統的性能。

Mandelbrot 繪圖的基本原理,網上已有無數的資料可供參考,想要找出一份能夠執行出結果,而又如同本文內如此精簡表達的程式,就不容易了。

簡而言之, Mandelbrot 繪圖,就是在一個指定的平面空間內,根據下列複數運算的式子,進行遞迴循環計算:

Z ( n+1 ) = Z ( 0 ) + Z ( n ) * Z ( n )

Z(0) 按照與座標相關的固定規則,賦予起始值後,開始計算。當複數 Z( n+1 ) 之絕對值,大於某一指定數值時,便取用已經遞迴循環的次數,作為選擇顏色的代表值,然後彩繪出一點,如此繪出的全圖,就稱為 Mandelbrot 圖形。

以 ABC Forth 來設計程式,上述怎麼講,我就怎麼設計程式,我可以僅用一個螢幕畫面份量的程式,將問題解釋完畢,隨後,我們才進行討論。程式列示如下:

10 FOR Y = 0 TO 600
20 FOR X = 0 TO 600
30 LET { A = I>R ( X ) }
40 LET { B = I>R ( Y ) }
50 LET [ Z(0) = R>ZR ( A ) + R>ZI ( B ) ]
60 LET [ Z(0) = R>ZR ( SCALE ) * ( Z(0) - ( 300 + 300 i ) ) + Z(CENTER) ]
70 LET [ Z(N) = Z(0) ]
80 LET #COLOR = 0
90 IF { ( ZABS ( Z(N) ) <= 16 ) AND ( I>R ( #COLOR ) < 18 ) } THEN 110
100 GOTO 140
110 LET [ Z(N) = Z(0) + Z(N) * Z(N) ]
120 LET #COLOR = #COLOR + 1
130 GOTO -90
140 LET YY = ( 600 - Y )
150 LET #COLOR = ( #COLOR SELECT-COLOR )
160 RUN X YY #COLOR SETPIXEL: DC
170 NEXT X
180 NEXT Y
190 END

這是一個在 600*600 的平面上,繪出 Mandelbrot 最基本圖形的程式,所顯示的圖形如圖一所示:

圖一、



以下是關於 Mandelbrot 繪圖的詳細說明,如果您看不懂,就請欣賞彩色藝術圖檔,快速看完本文,不必勉強。

我有許多研究題目,就知識需求而言,都離大眾甚遠,但研究成果不吐不快。我是一名退休的老人,不為名利,心中完全沒有負擔,方能如此。因此,我也不期望大家耗費太多時間,都來了解詳情。更不希望大家都頹廢於退休式的研究,影響了自己的人生,看不懂,就跳過去吧。

大約是20幾年前,剛從台灣大學農業機械系碩士班畢業的吳英明先生,私下為我單獨表演過這套繪圖技術。那時的個人電腦很落後,單色螢幕,解析度大約只適合繪出200*200點的圖形,僅宜使用FORTH中的組合語言,設計快速繪圖程式。能表達的現象,只能用來強調,可以模擬出與樹狀分枝或雪花結晶的細分再細分之自然現象相關。因為程式是組合語言寫成的,我放棄深入研究的機會。

1993 年 1 月份出版的『FORTH DIMENSONS 』V14 N5 P16 中,有一篇 Dr. Mark Smiley 所著的『Graphics and Floating Point in Real-Time Action』文章,裡面就詳述了 Mandelbrot 繪圖,文內附了黑白表示之圖,也有 Forth 程式。該文仍然大量依靠組合語言完成程式,我繼續放棄深入研究的機會。

兩年前(2010年)的春節期間,收到丁陳老師寄來的自製賀年卡,是一份老師憑自己的本事,繪製出來的精緻 Mandelbrot 彩圖。我嘆為觀止,冒然去信向老師請教繪圖方法,得到過老師以 F# Forth 系統之組合語言設計而成的程式。當時,我曾在 20100302 刊出的網文『必然處置』一文中說道:

『可惜老師用 F# Forth 系統執行出來的結果,還不能在我的電腦上重現,我不能仿造出圖案。如此更好,我只應看程式設計的原理,還有不懂的地方,就該上網詳細研究,如果我不能融會貫通,重新在 ABC Forth 系統上自行設計出同樣功能的程式,我就不夠格自稱是丁陳老師的好學生。』

那時的困擾,是根本不知道 Win32Forth V4.2 版系統中繪出彩色一點的指令,勉強以繪線來代表繪點,老電腦的速度又慢到難以忍受,非常委屈,最後顯示性能不佳,我又放棄了研究。

去年年底,我回台灣,買了64位元的電腦,沒有繼續抗拒實現這個程式設計的理由了,於是選在農曆春節期間,再度發展 Mandelbrot 繪圖程式。

事前當然繼續參考各方面的資料,其中一份最為精簡扼要的文章,值得推荐給大家參考,係香港道教聯合會青松中學的梁子傑老師,在『Mathematical Excalibur』Vol..8 No.4期刊中,發表的『利用 GW-BASIC 繪畫曼德勃羅集的方法』一文,文中附帶實際程式,也有很好的中文說明。

由於沒有忘記繪製該圖的基本觀念,我只耗費了除夕一晚,就完成了程式,年初一將完成圖寄給丁陳老師,並貼上 Face Book 向親朋好友拜年。

我寫成的程式,當然必須與上述所有資料來源的程式有所不同,我想表達的意念,當然也必須與上述資料來源的方式有所不同,寫成這篇文章才有意義。現在,我們就利用我的設計,探討 Mandelbrot 繪圖。

我的程式故意設定成:在 600*600 的視窗內繪圖。那麼,程式中的雙層 600 次定量迴路,就必須執行三十六萬次,為了繪完全圖,雙層迴路內複數的計算量,肯定不下百萬次。因此,這個程式是一份可以用來評鑑電腦硬體執行速度的理想工具,測試結果顯示,我的 ABC Forth 系統要耗3秒以上,才能完成一張圖,性能已經差強人意了,尚可接受。軟體執行速度,並非我想要求的重點,否則抄襲丁陳老師的組合語言設計,也能達到目的,但那就不具有表達我個人意念的意義。

不幸,同時測出了在 W7 或 XP 作業系統中執行的速度幾乎相同,單就此事表示,買 W7 的 64 位元電腦是多餘的,將來大概只剩安裝了大量的記憶體可以使用,尚表示具有一點價值,硬體執行速度,完全沒有改善,全世界的消費者都受了微軟公司的騙,買了已不能退貨,微軟在這件事情上,進一步大肆污染這個世界,我必須在網文上明確標記微軟的又一樁惡行,他們賺了非常不道德的錢。

這一段時日,我不再受寫文章出書之事約束,可以隨心所欲的享受自己設計出來的系統,設計對象當然仍是以數值分析方面的程式為主。回顧這些另行完成的設計,它們都顯示出一些特色, Forth 的可交談性(Interactive)天生本質,利於設計別種程式語言所不容易辦到的互動式程式執行功能,於是,我便試圖將所有的數值分析程式,積極設計成互動式的運轉方式,以便產生動態執行效果。

這一個 Mandelbrot 繪圖程式亦然,為了達到能夠牽一髮而動全身的目的,必須簡化可變動參數的個數,此事就成了分析整個問題的重要因素。這次完成的繪圖程式,是像丁陳老師所設計出來的成果一樣,可以互動式調整繪圖顯示。調整 Z(CENTER) 之值,就能夠上下左右移動,增減 SCALE 之值,就能逐步放大縮小,讓圖形凸顯碎形幾何強調的結構特質,於宏觀或微觀領域,顯示圖都呈現出自我相似的特點。

直讀上述程式,與口述數學原理幾無差別,我就能夠很容易並快速的透過稍微調變程式之內容,來獲得顯示圖形的變化趨勢。

我也很容易經由書籍資料中的解說要點,找出對應的可修改函數位置,直接代入程式,執行後立即顯示效果,驗證書本中所敘述的意義是否正確?這是對碎形幾何最直接的體認。

我不是數學家,沒有滿德伯(Mandelbrot)老前輩那樣的數學頭腦,需要實質的圖形,才能建立碎形幾何的觀念。但我是一名 Forth 程式語言的使用老手,有能力藉由自己設計的電腦程式,彌補與偉人相較時的能力差距。

圖形產品的第一份功能,用來向親朋好友拜年,而今年屬龍年,所以乾脆畫出一顆『龍年金龍蛋』,作為賀年卡。產生設計這個賀年卡的靈感,一半來自機遇上的碰巧,另一半來自機械工程方面的投影概念,年除夕夜晚,才能輕易的完成調變出來的程式。

所謂的機遇,源自選色的要求上,我對 Win32Forth 系統顏色的命名,本來毫無概念,而且每次按顏色名稱用色時,直覺上就覺得顯示顏色根本不對,我又不是色盲,心中一直納悶。後來,乾脆自己選定顏色與數字間的對應關係,就採用我從小玩弄電子零件時的色碼對應關係,『0123456789』對應到『黑棕紅橙黃綠藍紫灰白』,至於 10 以上的另外 9 個顏色,就不管對應關係了,只把最後一個 18,留給深灰色(DKGRAY)使用,以便確定它是最高數字所代表的色碼。

選色時,發現了懷疑自己是色盲的原因了,原來是系統將本名都命成了深色之名,而正常的顏色色名則是淺色,例如:紅色是 LTRED 而不是 RED ,其他類同。解決了這個問題,就有把握在程式中用對顏色。不幸,找不到對應的橙色,一怒之下,乾脆改用電阻零件色碼中代表誤差量的金色當橙色來用,後來就繪出了圖一。

圖一乍看之下,確實有點像個金蛋,但上下稍寬了一點,於是修改了第 140 列的指令成:

140 LET YY = ( 600 – Y ) * 5 / 6

重新執行一遍,就獲得了我向大家拜年的龍年金龍蛋。如圖二所示:

圖二、


互動式的程式,能夠調整出自己想要的圖形,先調整出一張縮小的圖形,如圖三所示,讀者能夠根據色碼由小到大,判斷出 Mandelbrot 複數運算後到達預設絕對值條件時的遞迴循環次數是:由圖邊到圖中央,為由小到大的趨勢,中央的暗灰色區域,遞迴循環的次數為 18 次,那裡的邊界,才顯現不平滑的結構現象,而且自我相似,宏觀或微觀狀況皆然。

使用我所設計的程式,進行縮小圖形的操作,可以將圖縮成單一個點,現象就如同宇宙之能納萬物於一點,一個點內竟然有著這麼複雜的東西!碎形幾何因此能幫助解決天文學上的問題。

圖三、

選擇圖形中的一小塊區域,放大顯示,展示如圖四所示。

從圖示中,我們仍然看到微觀顯示與宏觀顯示上的『自我相似性』。另外,此微觀圖示,是不是與流體力學中常想表達的邊界流線高度相關了?此圖純用手繪(Free hand)是繪不出來的,此處卻僅只花了幾分鐘時間,就能令其明確的躍然紙上,碎形幾何也因為這樣,而能幫助流體力學解決問題。

以傳統數學表達流體力學問題時,常須求解非常複雜的微分方程式,再以求解獲得的數學表示式,描述邊界流線的分佈形狀,解釋流體力學問題。

碎形幾何的數學式子,多麼簡明扼要,就能以圖四的形式,描述流線的分佈了,描述問題所需要的答案,卻只在調整出對應的參數而已。我所設計的這個程式,已經可以透過互動式的操作,立即獲得這些答案。可是,您若缺乏滿德伯老伯伯的頭腦,就很難建立起簡單數學與複雜自然現象的對應關係。不要氣餒,ABC Forth 能適當的填補這樣的差距。

圖四、

程式易讀,圖形如何能隨著易讀而容易調變呢?

我從書本上讀到,函數乘上一個單位虛數,也就是乘以 ( 0 + 1 i ) ,就能讓圖形轉變 90 度,那麼我想獲得轉變 45 度的圖形,豈不是就應該乘上 ( 1 + 1 i ) ? 於是將程式第 110 列修改為:

110 LET [ Z(N) = Z(0) + ( 1 + 1 i ) * Z(N) * Z(N) ]

執行結果,如圖五所示。

因此,我若想增加程式功能,以便能夠隨意操作出旋轉至任意角度的對應圖形,就成為很容易辦到的事情了,這項功能以後想玩時再來設計。

圖五、

依次類推,我想要獲得雙黃或三黃金龍蛋也有可能了,繼續改變第 110 列,例如改成:

110 LET [ Z(N) = Z(0) + Z(N) * Z(N) * Z(N) * Z(N) ]

執行結果獲得了圖六,『自我相似性』依然健在。

圖六、

圖形展示結束前,我們簡介憑著取用數學函數,也能產生扭曲圖形的方法,圖形就像受力而扭曲了,這也代表了人類知識的力量。

如圖七所示,程式調變如下:

110 LET [ Z(N) = Z(0) + ( sin ( Z(N) ) ) * Z(N) - exp ( Z(N) ) ]

圖形顯示看來跟一隻熱帶魚的體內結構與視覺外觀有點類似了,碎形幾何也因此能用來解釋自然界生物進化演變之後,生長出來的各種外貌花樣,雖然都千變萬化,其中卻仍然保有碎形幾何強調的自我相似性。

圖七

再作些微變化,另得圖八,『自我相似性』仍在。

110 LET [ Z(N) = Z(0) + sin ( Z(N) * Z(N) ) – exp ( Z(N) ) ]

觀賞此圖,可以感覺到,未來發展核融合(Fusion)反應裝置的高強約束磁場,需要扭曲出來的磁力線,可以藉由碎形幾何的幫助,以精簡數學表現出來。暗灰色的區域,就形同是磁場能約束得住的空間,那裡才能進行被約束住的核融合反應,區域邊緣有一些不平滑處的間隙弱點,可能引致能融合反應前高能燃料的逸出現象,裝置一旦開始進行了核融合反應,反應也會擾亂原有的磁場,被研究的磁場磁力線分佈問題,就會變得非常複雜。可是,請看上式,式子這麼精簡扼要!函數格式還跟熱帶魚的外觀魚紋如此接近,這就是碎形幾何特別的地方。

人類需要取之不盡、用之不完的能源,才能解決永久性的能源問題,已知可行的解決辦法,就是研究發展出能受控的核融合裝置,免不了必須深入接觸高強約束磁場磁力線的分佈問題。

以傳統數學來表達磁場磁力線的分佈,相當複雜,很多人都拿這種題目,取得核融合研究方面的博士學位。以碎形幾何研究核融合裝置內高強磁場磁力線分佈的對應關係,可以更為簡明扼要。寫出明確的表達式子,透過圖形顯示,取得對應的絕對參數,代表求解問題的答案,就更容易抓到受控裝置的設計要點。

碎形幾何是對自然科學現象的另一種高雅數學表述方式,為了貢獻人類,不要在乎博士學位,要在乎具體成果,大胆採用碎形幾何研究問題,會有益處,碎形幾何可以在核融合研究方面派上用場。

圖八、

如此推演下去,可以調變出無限種圖,自我相似性恆在。程式中能隨意調整設計的地方有許多處,都會得到變化多端的圖形,自我相似性也恆存在。

例如:更改選色上限非 18 而為 100 ,再插入一列新程式如下:

145 LET #COLOR = #COLOR MOD 18

那麼,圖形宏觀結構不變,微觀層次就可以出現 100 層的色彩,每 18 色循環一遍,繪出圖形之邊界層次,便非常細膩,且深入放大之後,圖形更為複雜,但也大量增加運算次數。不進行放大調整的基本圖形,如圖九所示:

圖九、

在本文中,我只採用 18 色展示,是為了簡化問題,便於解釋一般人不太容易弄懂的 Mandelbrot 繪圖技術。為了舉例方便,本文也僅只在第 110 列程式上進行變化。程式就已可有舉不完的例子,每一種簡單調整,都不必花費太大的力氣,就能演變出一大堆結果,研究到達這個地步,讓我一時也搞不清楚,到底是 Forth 迷人?還是繪圖迷人?

我們的頭腦都不如滿德伯老伯伯,他也已經去世,我用 ABC Forth 系統當工具,補我笨拙,就能師法於他。這個系統是我自己設計的,它能直接執行所有老師在課堂黑板上寫成的數學計算式子,而且,它還在發展,永不停息。

三年以前,我不太管 Forth 的事情,在閱讀網上台灣 Forth 同好所發表的意見時,經常見到大家表示:不想去開月會的原因,是長期以來, Forth 都只能老談那幾個很有限的應用範例,實在搞不懂,到底 Forth 能幹甚麼?

我以中文網文重新推廣 Forth 三年之後,已經舉出無數個 Forth 幹出來的實例了,後續還擺著更多的發展對象有待開發,不乏實例可舉。那怕您提出現行電腦幾乎無法直接執行記憶體存取式的自動控制問題,我的意念中依然很容易解決,端賴於我們自己願不願意這樣做而已?

您想過嗎?就算 Intel 與微軟聯合起來,搞得我們的 Forth ,不能直接執行 P@ 、P! 來控制電腦以外的物品了,我們還是有可能進行突破。您有心硬是想搞直接輸出輸入,絕對可以辦到。例如:就拿繪圖卡內的一小段記憶體區段來設計記憶圖譜式的輸出輸入(Memory map I/O),而非隔離式的輸出輸入(Isolated I/O),這樣的硬體界面當然能夠突破限制,搞成了,還可能大賣,賺點錢, Forth 的理念,就是這樣,沒有能難得倒 Forth 的電腦問題。

微軟的作業系統,將記憶體的前 640 個 64k (十六進制的 40,0000h 以下的位址),強行設定成他們的永久殖民地,以解決他們三十幾年來發展自掘墳墓式的作業系統歷史包袱安置問題。該區域以上的記憶體內容,都是使用者依然可以自由存取的地方。您看,我已經將圖形畫出這麼多花樣了,想找到純橙色的 RGB 三個對應色碼,也不是辦不到,只須花時間於圖形顯示之記憶體區域,測試其內容與顯示現象而已,沒畫出橙色,不是問題。

最近,在試用新購買的 64 位元電腦時,發現微軟的 W7 作業系統,想甩掉一點歷史包袱,而不再讓使用者在 64 位元作業系統中,能夠繼續直接執行原在 DOS 內的 16 位元程式,原來的 XP 作業系統則可以如此。我已警覺到許多有價值的 16 位元程式,必須切換電腦的作業系統模式後才能執行,感受到它們似乎有著從此之後不能再被使用的危機。積極發展將 Mandelbrot 繪圖程式,轉置入現行作業系統,直接執行出結果,便成為一項很有意義的工作。

我確實是能搞許多古怪的研究,比常人多一點耐心,有時候想到,如果我能對某些事物,例如:核災預防或地震監測,提前研究出一些有意義的結果,對人類可以有很大的貢獻。然而,一直不能貢獻,錯不在我,是社會不肯接受,所以我也不必遺憾,那怕是貢獻可以防治天災,天災卻真的發生了,又奈我何?我又奈何?

能夠仔細讀完本文的讀者,不妨回頭重新品味文首刊載的 Mandelbrot 繪圖原理說明與程式內容,然後竭盡所能,到網路上去查找相關資料,包括維基百科中的中英文資料,我相信截至目前為止,您還難以找出這麼精簡的說明與實例。我能為社會進行的貢獻,就像這篇文章一樣,都很渺小,但很實際。


2012/2/29補述

特將本文相關全套程式公佈於此,提供大家共同研究。請注意!您必須使用我所創作的 ABC Forth 數學計算系統,才能執行得出結果。

程式的延伸性意義,仍然相當廣泛,短文無法描述淨盡,國際參訪本文人數突增,國人同胞也請好自為之。

使用這份教材,正面教育我們的下一代,則是我的願望。


 
\ Mandelbrot 2012-01-23 by Ching-Tang Tseng in New Zealand

INTEGER X
INTEGER Y
INTEGER YY
INTEGER #COLOR

REAL A
REAL B
REAL RINIT
REAL SCALE

COMPLEX Z(CENTER)
COMPLEX Z(0)
COMPLEX Z(N)

: INIT BASIC
10 LET { RINIT = 2.65 }
\ 10 LET { RINIT = 0.0000000021 }
20 LET { SCALE = 2 * RINIT / 600 }
30 LET [ Z(CENTER) = ( -0.54 - 0.0252 i ) ]
\ 30 LET [ Z(CENTER) = ( -1.603343538e0 - 5.588696476e-9 i ) ]
40 END
;

: SELECT-COLOR ( n -- n )
CASE
0 OF BLACK ENDOF
1 OF BROWN ENDOF
2 OF LTRED ENDOF
3 OF YELLOW ENDOF
4 OF LTYELLOW ENDOF
5 OF LTGREEN ENDOF
6 OF LTBLUE ENDOF
7 OF LTMAGENTA ENDOF
8 OF LTGRAY ENDOF
9 OF WHITE ENDOF
10 OF DKMAGENTA ENDOF
11 OF GRAY ENDOF
12 OF CYAN ENDOF
13 OF GREEN ENDOF
14 OF LTCYAN ENDOF
15 OF RED ENDOF
16 OF BLUE ENDOF
17 OF MAGENTA ENDOF
18 OF DKGRAY ENDOF
ENDCASE
;

:OBJECT MANDELBROT

<SUPER WINDOW

:M STARTPOS: 100 100 ;M
:M STARTSIZE: 600 600 ;M
:M WINDOWTITLE: Z" Mandelbrot 作者:曾慶潭2012-01-23於紐西蘭 " ;M

:M ON_PAINT:

BASIC

10 FOR Y = 0 TO 600
20 FOR X = 0 TO 600
30 LET { A = I>R ( X ) }
40 LET { B = I>R ( Y ) }
50 LET [ Z(0) = R>ZR ( A ) + R>ZI ( B ) ]
60 LET [ Z(0) = R>ZR ( SCALE ) * ( Z(0) - ( 300 + 300 i ) ) + Z(CENTER) ]
70 LET [ Z(N) = Z(0) ]
80 LET #COLOR = 0
\ 選用100色的計算量尚能接受
90 IF { ( ZABS ( Z(N) ) <= 16 ) AND ( I>R ( #COLOR ) < 100 ) } THEN 110
100 GOTO 140
\ Z(0)=(-1.141-0.032i)就可形成Julia set圖形
110 LET [ Z(N) = Z(0) + Z(N) * Z(N) ]
120 LET #COLOR = #COLOR + 1
130 GOTO -90
140 LET YY = ( 600 - Y )
145 let #color = #color mod 18
150 LET #COLOR = ( #COLOR SELECT-COLOR )
160 RUN X YY #COLOR SETPIXEL: DC
170 NEXT X
180 NEXT Y
190 END

[ CLASSES ]

;M

;OBJECT

: RESTART CLOSE: MANDELBROT START: MANDELBROT ;
: SHIFTUP Z(CENTER) fdup 0.1e0 F* F+ {[ Z(CENTER) ]} Z! RESTART ;
: SHIFTDOWN Z(CENTER) fdup 0.1e0 F* f- {[ Z(CENTER) ]} Z! RESTART ;
: MOVELEFT Z(CENTER) FSWAP fdup 0.1E0 F* f- FSWAP {[ Z(CENTER) ]} Z! RESTART ;
: MOVERIGHT Z(CENTER) FSWAP fdup 0.1E0 F* f+ FSWAP {[ Z(CENTER) ]} Z! RESTART ;
: SHRINK {{ RINIT = 2.0 * RINIT }} {{ SCALE = 2 * RINIT / 600 }} RESTART ;
: ENLARGE {{ RINIT = 0.5 * RINIT }} {{ SCALE = 2 * RINIT / 600 }} RESTART ;
: RESTORE CLOSE: MANDELBROT INIT START: MANDELBROT ;

: MAIN
INIT
CR .ELAPSED
START: MANDELBROT
CR .ELAPSED
BEGIN
KEY DUP
CASE
131078 OF SHIFTUP ENDOF \ up
131079 OF SHIFTDOWN ENDOF \ down
131076 OF MOVELEFT ENDOF \ left
131077 OF MOVERIGHT ENDOF \ right
131088 OF ENLARGE ENDOF \ page up
131089 OF SHRINK ENDOF \ page down
131072 OF RESTORE ENDOF \ home
ENDCASE
131073 = \ end
UNTIL
CR ." RINIT = " RINIT F.
CR ." SCALE = " SCALE F.
CR ." Z(CENTER) = " Z(CENTER) Z.
;

MAIN


附註 : 20241027 重新整理後貼出。