Houdini學習筆記036_Poincaré Disc(龐加萊圓盤)<下>

不知道大家聽過算法藝術(Algorithm Art,也叫Generative Art)沒有,這是一種用計算機程序進行藝術創(chuàng)作的方式。由此可以得到很多神奇的圖案。Hyperbolic Tiling應該算是其中的一種,接上一篇的基礎圖案創(chuàng)建出來后,我用foreach節(jié)點(For-Loop with Feedback)進行循環(huán)拷貝。每次循環(huán)都是將現(xiàn)有的圖案進行莫比烏斯反轉,如果和已有的重復則去掉。

經過一番令人頭大的計算,總算是把全部VEX代碼寫完了,但還是有些bug和沒注意到的小問題在里面。就不打算展開細講了。foreach循環(huán)內也是只用了一個Attribute Wrangle節(jié)點,Run Over方式還是Detail (only once)。VEX代碼如下:
這里的示例是p = 7, q = 3的情況,初始得到的圖案是7條弧線。對于每條弧線由上面的三個點計算出其所在圓的圓心center和半徑radius。然后用mobius變換得到中心點的反演變換點,作為新的七邊形的中心。除了中心點之外的所有點也要進行莫比烏斯變換,得到對應的七邊形。

因為變換后的位置可能已經有七邊形存在了,所以要預判斷一下。我是把已有的中心點放在一個stack[ ]數(shù)組中,每次莫比烏斯變換后,與數(shù)組中已有點的位置作比較,如有重合(距離<臨界值,如0.01)說明這個位置已有圖形了,則不再重復變換。如果沒有,則生成新的中心點,并將其放到stack數(shù)組中。
對于foreach循環(huán)需要注意的是,Block Begin的Method用的是Fetch Feedback,即上一次的結果作為下一次循環(huán)的初始條件。Block End的Gather Method用的是Feedback Each?Iteration,只顯示最終次循環(huán)的結果,而不要把之前循環(huán)的都merge到一起。


因為中心點都放在了stack組中,后面可以用delete節(jié)點選擇組刪除點,只保留圖形的邊。

這個代碼塊基本上湊合能用,毛病也不少,迭代次數(shù)多了之后計算會出問題。還有弧線過圓心時的情況沒有考慮進去,只是這個月沒有精力再深挖了,以后有時間再改進吧。


如果可能的話,我還是想把Dunham教授文獻中的方法拿Houdini試一下。那樣效率應該會高很多。說不定可以將圖像的RGB值先映射到某個初始圖案上,每次迭代變換后對應的點繼承顏色屬性,就可以得到一幅魔性十足的作品了。
但愿這個想法能早日實現(xiàn),祝大家國慶快樂~