今天,很可能是摺紙史上頭一遭,我用一張不切的正方形摺出了千羽鶴(せんばづる,即一千隻紙鶴)。當然不是現實世界中啦,而是在電腦的虛擬空間中,用的再次是我們的 Orihime 演算法。在這篇文章中,我將與各位分享其背後的故事。
傳統上相信,摺出一千隻紙鶴的人就能讓願望實現,而到了今天還是有許多摺紙材料包是專門為了這個目在販售。隨著我們進入了超複雜系摺紙的時代,自然會不禁想要用不切正方形一枚的方式摺出一樣的東西;這本身在概念上並不困難,但基於顯然的理由,這從來沒有真的被實行過。
回顧 2015 年,當時我對傳統紙鶴的各種變化形很有興趣,包括不切千羽鶴的想法在內。當時我並不知道 Lang 的 Origami Design Secrets 第二版,因此我不知道 Lang 所提出的千羽鶴摺法的任何事。取而代之地,對於「平面上的鶴」這樣的題材,我獨立發展出了一個不同的模式,而該模式結果比 Lang 所提出的模式要更加緊密。每一個拼片均為 10 × 10 的格子,如下圖所示。
我也根據了該模式實際地摺了一個 3 × 3 版本的模型,那看起來就像是《秘伝千羽鶴折形》中的「青海波」的不切版本。其摺疊步驟非常之長且具技巧性,而當時總共花了我四天才把這個模型摺完。基於這個緣故,我從來沒有認真考慮過要再更進一步,因為我知道即便只是 100 隻紙鶴都會讓我發瘋,別說 1000 隻了。
最近,因為我大幅地改良了在 Oriedita 中的 Orihime 演算法之實作,有一些人提出了用電腦來摺千羽鶴的可能性,而我馬上就知道這中於是我讓這個想法成真的時候了。然而,完整的千羽鶴之 CP 包含了超過一百萬條摺痕(在我最終的 CP 中,精確來說有 1,187,392 條線),這跟龍神的 CP 比起來是完全不同層次的一個怪物。快速估算可以知道若用我摺龍神時的資料結構來摺、將會需要用上超過 200GB 的記憶體,這非常不切實際。即便我隨後發展出了一個更有效率的資料結構,仍然還是需要大約 100GB,而這當然是遠在我的筆電的記憶體之上的。
幸好,是有辦法可以用比實體記憶體更大的設定去啟動 Oriedita 的,而當它超出實體記憶體時,它會自動切換來使用硬碟來儲存。多虧了靜態硬碟的速度,即便像這種怪物級的 CP 也能在合理的時間內摺完。
不過在這之前,我必須先把 CP 檔案畫出來。我理想中的千羽鶴版本並不是單純地把紙鶴安排成 32 × 32 的陣形(那樣會是 1024 隻,超過一千了)、或者在四個角落各省略六隻(包括 Lang 在內有一些人提出過這樣的陣形,但我並不喜歡成品當中的空白處),而是把八個方向上各一隻的大小放大兩倍,如此一來就會是剛好一千隻且沒有任何空白處。
然而,在這樣的設計之下,我就不能單純只是用反覆地複製貼上來產生出檔案了,而因為整個 CP 是如此之大,在 Oriedita 當中手動編輯 CP 也是同樣不可行的,因為每一次的操作都會花上無盡的時間。於是,我特地寫了另外一個 JavaScript 的程式來專門用來將小的元件組合成 CP 檔案。最終的 CP 檔案大小達到 83MB,並可以在這裡下載。
終於,在其它的一些演算法最佳化之後,經過了 4 小時 10 分鐘的執行時間和 128GB 的記憶體設定,我成功地把千羽鶴摺出來了。至於我許的願望,那當然是祕密。
近期留言