周源遠



為現實生活的物品進行3D建模,不僅要認真測量實物,還要進行各種比例計算,力求達到精確。但如果設計的是藝術品或者有藝術味的作品,又往往希望它能夠“隨性而為”。例如,讓某個作品模型每一次打印出來的實物都有一些不可預見的變化,是不是特別有意思?圖1中村莊的模型實際上用的是一個房子的模型,然后批量復制出來,這些房子的位置、大小和方向都是隨機生成的,整體上看起來錯落有致。
在常見的建模軟件中,想要實現上述的想法并不容易,因為大多數建模軟件沒有提供這樣的功能。幸運的是,參數化建模軟件3D程序員提供了隨機數生成函數,使用者結合循環、縮放等語句,就能夠實現在3D建模中加入隨機元素,讓生成的作品變得有趣。
計算機中的隨機數
在科學研究中常常用到隨機數,如從統計總體中抽取有代表性的樣本,或者將實驗動物分配到不同的試驗組的過程中,或者在進行蒙特卡羅模擬法計算的時候等。隨機數最重要的特性是,它所產生的后面的那個數與前面的那個數毫無關系。
在計算機編程中隨機數的應用非常廣泛,最常見的是游戲和藝術繪圖。使用隨機數可以讓游戲產生不可預知的變化,從而增加樂趣。例如,“石頭剪刀布”游戲是電腦生成的一個隨機數和游戲用戶輸入的信息進行比較。圖2是用Processing編寫的小程序,功能是繪制出由隨機的點和線組成的圖案,每一次運行都能產生不同的美麗圖案。
而真正意義的隨機數是按照實驗過程中表現的分布概率隨機產生的,其結果是完全不可預測的。計算機生成的隨機數其實是“偽隨機數”,這些數列看上去“似乎”隨機,實際上是通過一個固定的、可以重復的計算方法產生的。即使這樣,計算機的隨機數也能夠滿足具體應用中的大部分需求。
3D建模中隨機數的應用
3D程序員的隨機數功能位于“數學”模塊,能夠生成起始值到終止值之間的整數。隨機數的具體應用可以通過下面幾個案例來展開。
案例1:隨機變化的花瓶
3D程序員中有個花瓶的范例,是典型的參數化建模例子。范例是描述利用一個正弦函數繪制的曲線,然后旋轉形成一個曲線圓滑而優美的花瓶(如圖3)。
將正弦函數公式的一些關鍵參數替換為隨機數,就可以改變花瓶的整體長度或者寬度,那么每一次產生的花瓶造型都會變得不一樣。圖4所示的是將花瓶高度換成隨機數的代碼,每一次生成的花瓶高度都是不一樣的。
同樣,也可以更改花瓶的寬度(如圖5)。這些造型不一的花瓶打印出來并擺在一起,能夠體現一種隨機之美。
案例2:隨機鏤空的肥皂盒
肥皂盒大都是由放置肥皂的凹處以及底盤的瀝水孔組成。設計一個肥皂盒,關鍵之處就是用循環語句來實現對瀝水孔的批量處理,這也可以用3D程序員實現。利用循環語句,用數學模塊指定循環變量i的起始值、終止值、每次循環的增量,參考代碼和生成的模型如圖6所示。
在循環的增量上加入隨機數,就能實現肥皂盒底下的穿孔數量隨機生成,而且每次生成的模型都不一樣(如下頁圖7)。
同樣,還可以在瀝水孔縮放系數上加入隨機數,讓瀝水孔的大小變得不一樣,甚至可以改變循環變量的起始值位置,讓瀝水孔的位置也發生變化。
案例3:隨機鏤空的筆筒
在循環的基礎上,以鏤空筆筒為例,角度旋轉結合隨機數,讓愛心的角度在0~360度內隨機變化,生成多角度鏤空的愛心筆筒,這讓筆筒變得更有特色,參考代碼如圖8所示,效果如圖9所示。
這樣的案例還有很多。例如,構造一棵圣誕樹,可以通過參數讓樹進行“自由生長”,隨機生成樹的分層次數或者葉片節點的數量。又如,設計一個創意童話城堡模型,可以用隨機數控制城堡的門、窗、煙囪等的大小,甚至可以通過隨機數在豐富的色域系統中隨機賦色。通過隨機數的應用,建模將變得更有藝術性,跳出了傳統的基于精確計算的建模思維。
結語
在學習3D建模的過程中,無論是學習范例,還是最終設計自己的個性化作品,都在不斷重復經歷提出問題、選擇建模方法、推導模型的公式、求解模型這一建模過程,而隨機數的加入則從數學角度提出了更高的要求。因為要合理使用隨機數,就要找出模型的特征參數并設定合理的隨機數范圍,還要找出不同參數之間的關系,這些都是數學建模的核心能力。也正因為這樣,學生才有可能會為了設計出更加有趣的作品,認真學習數學。通過“造物”促使學生進行跨學科學習,并對學科更加感興趣,這正是創客教育的最大價值所在。endprint