數學家王浩於 1961 年提出王氏磚,是一組可以彼此鄰接匹配的拼接塊,以正方形為單位,每邊可以有二到四種不同的顏色,拼接時鄰接邊必須是同色,若兩個拼接塊旋轉或翻面後相同,視為不同的拼接塊,例如,以下兩個是不同的王氏磚:
對於一組王氏磚,一個問題是,可否在符合拼接時鄰接邊必須是同色的規則下密鋪無限大的平面,另一個問題是,若可以密鋪平面,是不是一定存在周期性的密鋪方式,王浩的猜想是一定存在,不過他的學生 Robert Berger 後來證實,存在可密鋪平面且只能非周期性密鋪的王氏磚。
在這邊我們感興趣的是有哪些王氏磚可密鋪平面,而且可使用程式的方式來隨機產生拼接結果,對於這類的王氏磚,鄰接邊必須是同色代表著,鄰接邊有著可對接的圖樣,也就是說,我們可以修改王氏磚的圖樣,來產生想要的地圖。
在〈Wang Tiles〉中,收集了不少王氏磚組合,其中最基本的是 2-edge,這類王氏磚每個拼接塊最多可以有兩個顏色,例如:
在上圖中,為每個磚塊編上的號碼,這些號碼與拼接塊的對應是有意義的,如果在方塊的四個邊標示 1、2、4、8 數字:
若邊是黃色的話,可以擁有邊上的數字,那麼上圖的黃邊數字加總就是 5,也就對應了編號為 5 的拼接塊。
那麼該怎麼隨機產生拼接地圖呢?隨機選取每個拼接塊當然是行不通的,要做的是隨機決定拼接塊的邊是否為黃色,例如:
對於每個方塊,現在四個邊都有 0 與 1 的隨機組合,若有 1 的邊表示黃色,那麼每個方塊就可以計算出加總:
將以上的概念實作出來並不是難事,底下是個示範:
對王氏磚基本圖案,對應的更換圖片的話:
就可以產生以下的圖樣:
我也實作了 OpenSCAD 的版本,用來產生水管盒:
要怎麼變化,就看你怎麼設計拼接塊,例如,修改一下 GREEBLECITY SET 06: ROAD MAP 中的模型,也可以生成隨機城市:
除了 2-edge 之外,在〈Wang Tiles〉中,還有其他的王氏磚組合,有興趣可以自行實作看看,基本原理都是相同的。