2012年1月15日 星期日

產前迎生慶祝活動(Baby shower)

產前迎生慶祝活動(Baby shower)


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


中國人迎接新生命的到來,以初生嬰兒滿月來慶祝。西方文化不同,以預計嬰兒出生前的一個月左右,舉辦產前迎生慶祝活動來慶祝。創造宇宙繼起的生命,絕對是一件偉大的事情,所以應該慶祝,事前、事後慶祝,都是慶祝。

大女兒預計下個月生產,於是小女兒就為此事,協助大女兒張羅了這麼一次的慶祝活動,忙了幾天,愉快的辦好了一次迎生慶祝活動。習慣上,那是女人家的活動,而且以女婿家的來人為主,我這個老男人只好退居一旁,忙我自己的事情。

現代人挑選的黃道吉日,不是去看黃曆,放假期間最為吉祥,大部份人都方便參加活動的日子,就是黃道吉日。一月十四日就是這麼一個日子,家中一次來訪將近二十個婦人,熱鬧非凡。

我對一些事務,看法與做法常與一般人不同,但只要理由正確,就大可不必在乎別人的觀點如何?儘管放心去做。女兒結婚時,放任她一切自己作主,婚宴她自辦,不必邀請我們為人父母這方面的客人。理由是我們移民在外,沒有必須向親屬長輩交待事務的問題,因此而不必欠下與親朋好友來往時的傳統人情。女兒自行料理一切事情,終身都能為自己的自主成果,留下得意的回憶。這次的迎生慶祝活動亦然,她自己作主。

藉著這麼一個迎生慶祝活動的主題,我也可以引申出幾個迎接新狀況的題材,寫進這篇文章。

迎生慶祝活動當然留下了許多照片,照的都是她們得意的傑作,女兒會貼進她自己的臉書與網頁,各位親朋好友若有興趣,就請自行前往觀賞。我這裡則在其他方面,也來迎接一些新生事物,與介紹剛開發出來的 Forth 新氣象。

首先一個最大的主題,是我這星期才完成的『3D函數繪圖程式』。它不容易完成,我詳細讀完手頭所擁有的論文資料,參考古聖先賢所寫的程式後,足足花了三天,才完成使用 ABC Forth 數學計算系統寫成的程式。

接下來又花費了幾天的時間,測試程式執行效果,並發現了幾個出問題的地方,必須進行除錯修正。迎生慶祝活動當天,落定了所有的設計,『 3D 函數繪圖程式』就將誕生。剩下來的程式設計工作,只是為了美化輸出,選用適當比例的設定參數,用於開啟視窗,並在其中按指定比例繪圖。此事只宜在親眼目睹輸出效果後,採用回饋設計的方式來完成,需要再花一點時間。

以前,從事於科學研究工作時,對科研程序有點認識。從事科研工作者,在準備開始進行一項新的研究主題時,千萬不要自以為馬上就可以成為諾貝爾獎的得主,而直接搞些前人從未搞過的爆炸性研發,否則失敗的居多。我這次發展『 3D 函數繪圖程式』,也是抱持著正常心情而發展,最後,才能成功。

寫研究論文時,都要引用參考文獻,它表示了從事研究者,已經搞清楚了前人的技術,也有能力重新再現同樣的研究,然後才有這篇論文裡更上一層樓式的創新報告。這篇文章雖然不是論文,但能夠進行類似的描述,寫出結果,表示程式的發展經過,與寫論文之進行方式,是完全相同的。

三年前,第一個用來試用 ABC Forth 數學計算系統的測試程式,就是平面上的 2D 函數繪圖程式,它曾以寫成單篇獨立網文的方式,刊載於此網頁。這三年來,網文中已有不少刊出的圖形,是使用該程式完成的。

圖形最能表示函數變化的趨勢,卻不強調絕對精確的數值。同理, 3D 的函數圖形,也是一樣,以表現函數變化趨勢為主,不強調精確數值。

三十幾年前,我就設計過函數繪圖程式,那時的電腦軟硬體性能都不太好,有時,單純只為繪出一幕 3D 函數圖形,就得耗費一個小時以上,因為程式中難免帶有大量的投影座標換算計算。為了讓顯示圖形較為清晰,都希望將位於圖形後面的隱藏線處理掉,那麼,就得再度進行一大堆、一長串的比較與計算,然後再以程式執行一點一點的反白繪圖消除工作,去除背後的隱藏線,繪完一張全圖的時間,就會更長。

那個年代,繪完一圖,因難能可貴,都必須立即將結果存成圖形檔案,再用印表機印出一張圖來留念。說實在的,對顯示圖的趨勢感,有時仍然難以建立,圖的品質也不太好。

今天,我重新完成一套設計,感覺已經完全不一樣了。以前用的是買來的軟體系統,今天,使用的是自己設計出來的 ABC Forth 系統。

以前的顯示性能較差,解析度很低,現在的顯示性能則改善了許多,色彩與解析度都更好了。

以前每次執行程式,只能得到一張圖,現在,我粗略的測試,繪出一張一般性圖形,使用 XP 作業系統中 ABC Forth 設計出來的程式,耗時僅約 0.078 秒,神速無比。這樣的新環境,引誘我來設計出動態顯示新程式了。

從設計出來的顯示效果中,可以很容易的體會出 3D 圖形所能表現的景觀,趨勢感就非常強烈,使用者就能快速調整出最適當的鳥瞰角度,將圖形固定下來,存檔留參。
以這一套工具來繪製三度空間的函數圖形,速度之快,幾乎可以說是立即就能獲得結果,因此有著無限的應用潛力。
輸入的函數,只需按照教室課堂上,老師寫在黑板上的數學式子輸入,而且只需寫成一列便可,這種函數有無限多種。
這套工具可以用於教學,是動態顯示式的教學工具,能為學生建立強烈的函數圖形實際觀念,是萬用的程式。
如果某人很有藝術眼光,喜歡設計,那麼,這一套工具能夠協助他,快速產生大量的藝術圖形,供作藝術設計之用。
許多科學研究以三度空間來表示時,就能快速找到關鍵數據。我已將程式除錯到運作起來沒有問題的地步了,當然就適合用於實際的科學研究。

我所設計的 ABC Forth 數學計算系統,並不能普及性的被大家使用,我也不想浪費時間去搞推廣,中華民國台灣,想不想利用這個免費的資源來教育我們的下一代?非我所能主使,但我也不在乎。從網文的敘述中,讀者應該很容易體會,我自己已經可以享受各種設計成果的樂趣了,這才是樂觀的實際人生。

我始終想搞地震早期警報監測系統的偵測研究,但沒錢買硬體,這幾天有個念頭,想要自己製造超低聲頻的探頭,這沒甚麼大不了的,以前曾參與國防方面的研究,美國人不賣關鍵性偵測元件給我們的時候,我們不也都是這樣子自立自強嗎?後來反而更能走出自己的一片天地。

家兄是個外交官,這幾天也開始利用我所設計的語音輸出系統,作為講稿評鑑工具,或用來聽取自動讀出的訊息。我的同胞不重視這些發展成果,又有什麼關係呢?我有一本待出版的新書,書中記錄了不少有意義、有價值的技術,我不能確定書商是否誠心誠意的想為國人而出版?我想,這也不很重要,這幾個月,我在設計程式時,就已經不斷的必須回頭參考我自己寫成的這一本新書,它已經成為有用的工具。如果這本書不能以實體書與大家見面,我就將其收歸己有,絕不考慮以電子書的方式出版,以免糟蹋這種技術產品。

同胞們,有骨氣一點,自己的事務要靠自己打點,我在樂於回報自己的國家與社會時,請不要輕忽這些微小的貢獻,如果國人事事都仍輕忽看待,長此以往,國家也只好走向滅亡一途。

此處就以由簡入繁的方式,刊載幾張顯示不同效果的 3D 函數圖。我喜歡設計出有用的萬用工具,卻不喜歡沉迷於五彩繽紛的花樣結果中,因此,只展示黑白圖形,以表示對數學函數的尊重。

第一組兩張圖,表現一個精簡函數:

40 LET { Z = -2 * exp ( sin ( X * Y ) ) + 4 }

經由 3D 繪圖程式繪出函數圖形後,如果不能進行快速的旋轉動態顯示,那麼,輸入下列數據後,只能得到圖一的結果。

如果您想更為仔細的審視本網文中所刊載的任一圖示或照片,請用滑鼠就在圖面上點選一次,另一個以全黑為背景,正中央顯示更清晰圖樣的畫面,就可以呈現在您眼前。不想再看時,以滑鼠點選全黑畫面右上角的打叉圖示,就能自動恢復成現行畫面。

不離開此畫面,直接操作 control+ 或 control- ,則能就地放大或縮小整篇內容的顯示,包括所有的圖示。


main
Enter X range ... Minimum Maximum(separated by a blank):? -2 2
Enter Y range ... Minimum Maximum(separated by a blank):? -2 2
Enter Z range ... Minimum Maximum(separated by a blank):? -2 2
Enter tilt angle(degrees):? 45
Enter rotation angle(degrees):? 45
Enter number of x lines to plot:? 50
Enter number of y lines to plot:? 50
Want hidden line removal(y/n)?
Yes
Elapsed time: 21:08:57.484
Elapsed time: 21:08:57.562 ok

圖一


我所設計的系統,可以快速動態的處理出,由各種不同鳥瞰角度顯示之結果。立即進行快速的操作,便能得到自覺比較滿意的顯示圖形。圖二顯示了由原始設定為旋轉 45 度及仰角亦為 45 度的角度,變換到旋轉為 19 度而仰角為 312 度時,看起來比較美觀的圖示。

最後被固定繪出之圖,有點像海中的大魟魚(Stingray),在前曾貼出的網文:『開懷大笑』文末,有這種魚的實際照片,讀者不妨再去那裡觀賞一次,牠生的蛋有點特別,是方蛋。

output-data
XMIN, XMAX = -2.000000000 , 2.000000000
YMIN, YMAX = -2.000000000 , 2.000000000
ZMIN, ZMAZ = -2.000000000 , 2.000000000
TILT, ROTA = 312.0000000 , 19.00000000
XLINES, YLINES = 50 , 50
REMOVE = 1 ok

圖二



第二組展示圖,是一組經常被用來展示 3D 繪圖性能的精簡函數:

40 let { z = 10 * sin ( x ) * cos ( y ) }

它顯示的形狀類似一個波浪面。我們仍然採用上述方式,來顯示快速動態操作出結果的不同,以便讓大家體會程式性能上的差異。圖三已經繪出了 3D 曲面的圖形,而且上視面與下視面的線條有明顯的不同,所有背後的隱藏線,都被澈底的處理掉了。但是由旋轉與仰角均為 45 度的鳥瞰角度來顯示,效果依然不太好。

main
Enter X range ... Minimum Maximum(separated by a blank):? -5 5
Enter Y range ... Minimum Maximum(separated by a blank):? -5 5
Enter Z range ... Minimum Maximum(separated by a blank):? -5 5
Enter tilt angle(degrees):? 45
Enter rotation angle(degrees):? 45
Enter number of x lines to plot:? 50
Enter number of y lines to plot:? 50
Want hidden line removal(y/n)?
Yes
Elapsed time: 21:18:42.828
Elapsed time: 21:18:42.906 ok

圖三



設計完成的程式,可以快速動態操作出理想的結果,操作最終之數據與圖示如下:

output-data
XMIN, XMAX = -5.000000000 , 5.000000000
YMIN, YMAX = -5.000000000 , 5.000000000
ZMIN, ZMAZ = -5.000000000 , 5.000000000
TILT, ROTA = 297.0000000 , 39.00000000
XLINES, YLINES = 50 , 50
REMOVE = 1 ok

圖四



為了能夠更為明顯的區分出處理隱藏線後的效果,我刻意再將無此功能的 3D 繪圖方式展示如下:圖五是只能直接繪線,不能處理隱藏線的顯示圖,品質確實差多了。就算能夠快速動態操作出適當的鳥瞰角度後,改善的情況則仍然有限,如圖六所示。

將圖五、圖六這一組圖,與圖三、圖四那一組圖直接比對,讀者應該能夠體會,處不處理隱藏線?效果上的明顯差異了。

main
Enter X range ... Minimum Maximum(separated by a blank):? -5 5
Enter Y range ... Minimum Maximum(separated by a blank):? -5 5
Enter Z range ... Minimum Maximum(separated by a blank):? -5 5
Enter tilt angle(degrees):? 45
Enter rotation angle(degrees):? 45
Enter number of x lines to plot:? 50
Enter number of y lines to plot:? 50
Want hidden line removal(y/n)?
No
Elapsed time: 21:26:08.171
Elapsed time: 21:26:08.203 ok

圖五



調整角度後的數據輸出報表及圖六,如下所示:

output-data
XMIN, XMAX = -5.000000000 , 5.000000000
YMIN, YMAX = -5.000000000 , 5.000000000
ZMIN, ZMAZ = -5.000000000 , 5.000000000
TILT, ROTA = 307.0000000 , 33.00000000
XLINES, YLINES = 50 , 50
REMOVE = 0 ok

圖六



我僅只在本文中舉出兩個非常簡單的函數來繪圖,而這個程式卻是萬用的,只要是合理能計算的函數,都能使用這個程式繪出圖形。
我在試用程式性能期間,深深的體會出若想獲得好圖,關鍵決定於輸入選擇範圍的參數上。
執行這些程式時,會形同吃了嗎啡似的,一直沉迷於欣賞自己創作出來的顯示結果,因而浪費掉許多時間。

圖一與圖二,是從一個較為複雜圖形中,選定一小區域範圍後,所繪製出來的 3D 單純圖形,它的大範圍圖示表現欠佳,就如圖七所示,調整出圖八,則尚差強人意。讀者可藉第三組這兩張特別的圖示,體會如何從複雜圖形中選定範圍?以切割出一小片區域,來獲得理想顯示圖形的方法。

main
Enter X range ... Minimum Maximum(separated by a blank):? -10 10
Enter Y range ... Minimum Maximum(separated by a blank):? -10 10
Enter Z range ... Minimum Maximum(separated by a blank):? -2 2
Enter tilt angle(degrees):? 45
Enter rotation angle(degrees):? 45
Enter number of x lines to plot:? 50
Enter number of y lines to plot:? 50
Want hidden line removal(y/n)?
Yes
Elapsed time: 07:29:10.000
Elapsed time: 07:29:10.062 ok

圖七



快速操作調整鳥瞰角度成下列數據後,得到了比較能顯示全盤趨勢的 3D 曲面顯示圖形,如圖八所示。

進行整個操作,將結果黏貼進這篇文章,僅只是幾分鐘的事情。

output-data
XMIN, XMAX = -10.00000000 , 10.00000000
YMIN, YMAX = -10.00000000 , 10.00000000
ZMIN, ZMAZ = -2.000000000 , 2.000000000
TILT, ROTA = 88.00000000 , 41.00000000
XLINES, YLINES = 50 , 50
REMOVE = 1 ok

圖八



實際上,這一套程式是在 W7 ABC635Win32for.exe 中發展而成,我已開始適應 64 位元電腦的使用環境,並進行程式發展,後續還有許多的新性能,等著我去體會,例如:以多 CPU 執行 Forth 程式的效果。

我還有新的數學計算程式發展計劃,『 3D 函數繪圖程式』的發展必須早點結束,成果則留待將來必要時使用,這是一套新誕生的工具程式,這篇網文記述了這個程式在產前迎生慶祝活動過程中所繪出之圖形。

第二個主題,不必那麼約束,改談其他話題。

幾個月前才剛栽種的蘋果樹,高度還不及一公尺,卻開了花,結了果。曾在此網頁於 20111102 刊出的『忙著搞生產』一文中,顯示這棵剛種的蘋果樹開滿了鮮花。後來,小樹無法負荷那麼多的果子,只好大量落花,最後,竟然還是結成了一顆果子,我為這顆即將到來的新蘋果,命名為『蘋太郎』,也特別寫進網文,刊列圖九照片,刻意慶祝。

產前迎生慶祝活動,大部份只在第一胎嬰兒到來之前,母親才比較有興趣舉辦慶祝活動,這顆蘋果與這棵蘋果樹,又何嘗不是如此?明年的『蘋次郎』、『蘋三郎』,甚或是『蘋五十六』,我大概就不會有興趣再這樣介紹給大家了。

蘋果樹旁的小藍莓,果子也成熟了,我每天見牠發藍時,摘了就吃,享受最自然的人生。

圖九

2012/2/24補記

清晨起床時,我太太告訴我,我們家的『蘋太郎』成熟落果了。
目前正是紐西蘭新蘋果上市的季節,所以『蘋太郎』確實是果熟落地。
我仔細瞧它的外觀,鑑別蘋果的種類,看來是 Royal Gala 或 Bareburn ,而不是期待中的 NZ Rose ,但這三種都是品質較好的種類。
由於果樹太幼小,才種了四個月就長蘋果,結成的果子大約僅為正常上市果子的三分之二大小。
從此之後,我們家的院子內,就有了一棵蘋果樹。

圖十、

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

2 則留言:

Gloria 提到...

恭喜曾先生下個月要當外公了
祝福您與家人 龍年大吉大利

Chings World 提到...

謝謝!

家人確實在佈置歡迎小Baby。