2011-08-14

部落格搬遷公告 Blog Moved

This blog has moved to the new address
http://prototypingideas.blogspot.com/
since August, 2011. Articles in this blog will remain as they are.


自 2011年八月份起,部落格搬遷至以下新網址:
http://prototypingideas.blogspot.com/
未來所有數位設計與實作相關文章都張貼在新部落格,
本部落格舊文章將不再更新。

2011-01-11

資料串列處理

Grasshopper論壇主題:Change a point list order from 0-1-2-3-4-5 to 0-1,2-3,4-5

原發問者的問題是希望將一條龍式的資料串列,切割為長度為2的串列群,我的解答是利用 Path Mapper 重新配置資料串列的路徑,這屬於資料結構裡的串列結構,對初學者可能有難度,但一旦學會了用 Path Mapping,功力肯定大增!


資料路徑中大括號 { } 表示資料串列在樹狀結構中的位址,如 {0; 0} 表示位址為 0->0。後方的括弧 ( ) 為資料串列內容,以一維陣列形式表示,所以 {0; 0}(2) 為第一個串列的第三筆資料(以0為基底)。Path Mapping 好用就在於他可以加上運算和函數。上例中 floor(i/2) 為 i/2 後取整數(無條件捨去),i%2 為餘數除法。列舉說明如下:

{0; 0}(0) => {0; floor(0/2)}(0%2) 得 {0; 0}(0)
{0; 0}(1) => {0; floor(1/2)}(1%2) 得 {0; 0}(1)
{0; 0}(2) => {0; floor(2/2)}(2%2) 得 {0; 1}(0)
{0; 0}(3) => {0; floor(3/2)}(3%2) 得 {0; 1}(1)
依此類推。

原作者沒講清楚,他其實要問的是 0-1-2-3-4-5 如何變成 0-1, 1-2, 2-3, 3-4,...,而非 0-1, 2-3, 4-5,...。如此一來就要用到兩次 Path Mapper 或其他技巧,各位看倌可以試試看~

2010-11-04

Grasshopper的學習瓶頸

GH 將抽象設計思維變成具象設計流程,螢幕上的複雜連線和運算,一時之間讓很多人調適不過來,那種感覺很妙,就像是每天寫日記是用來整理思緒與記憶,過一陣子回頭來讀,卻感覺那些文字好像是別人的事,而不是自己。

根據過去幾個月的教學和問題解決過程,大致整理出幾個學習 GH 可能遇到的瓶頸。其實不單單是 GH,所有連線式的視覺化程式環境都有類似的學習瓶頸,例如 Max/MSPPureData

瓶頸一:習慣成障礙
思考的習慣一旦養成,就很難改變。照理講,一個具備創意思維的人,思考應該是天馬行空、無所羈絆,但實際上我們經常為了效率而採用特定步驟或方法,或者因為被工具制約,就慢慢養成習慣。例如我們習慣於用圓心和半徑來定義圓,卻忘了還有直徑定圓、三點定圓、內切圓、法向量與半徑...等方法。要在 GH 裡遊走,必須要打破窠臼、不受限於既定方法,否則很容易走到死胡同。

怎麼辦?首先,凡事回歸基本面,從定義找出規則,保留彈性,多從不同角度思考。舉例來說,一個座標系的構成元素包括一個原點、三個向量,或一個平面上的點、一個法向量,上述二者可以互通,因為兩個不平行的向量可以定義出一個平面,道理是相通的。

瓶頸二:數學恐懼症
我們從小被數學(或數學老師)嚇壞了,只要聽到數學名詞,很多人的腦子立刻拉警報「我不會!我不懂!」,然後好像大腦電源被關掉一樣,眼神呆滯、腦子拒絕運轉。這是件多麼可怕的事!數學不是應該好用又好玩嗎?說老實話,我也一樣是被嚇大的,直到我到美國唸書才重拾信心。

衍生式設計方法、參數式設計和設計運算都會用到數學中的算術、幾何、邏輯、線性代數觀念,要能精通此道,對數學的熱愛更是不能少。如果對數學不是「心中有愛」,而是「心中有礙」,那該怎麼辦呢?一個簡單的方法:降低自己的心智年齡,拿出國中、高中數學複習一番,你會發現,當年覺得困難的問題,現在都變得高級簡單!那是因為我們隨著年齡增長,思考的複雜度也增加,理解力、聯想力、解決問題能力也在無形之中提昇!

瓶頸三:觀察與實驗
細緻的觀察力、力求實務驗證的實驗精神,是每一位設計者的必要能力與態度,尤其是對複雜問題或現象,看出問題的脈絡(context)與現象的模式(pattern),就能培養出極佳的洞察力;對抽象的意圖與構想,能想出具體落實方法,並且付諸實踐,便可以培養出豐富經驗與獨到的見解(智慧是也)。

GH 要處理的多是複雜幾何問題,如果平時對建築與空間秩序性、代表性案例、複雜幾何形體(結構)、自然界造型(結構)沒有涉獵,充其量只能想出老早就存在的問題和方案,學生當做練習還可以,但對專業設計者來說不啻是一種因無知而造成的傷害。

2010-11-03

BioForm工作坊

幾個月前和 Lex 聊到推廣 GH,就興起了假日工作坊的念頭,來搞個 mini◎ Art & Design 的新系列活動。感謝 Lex 的大力支援與催促(有出版社催稿的功力),以及正好有了 URS 89-6 的場地(交大建築所新增的西門町根據地),於是就趕鴨子上架,在 10/31 順利開課。

構自然 BioForm Workshop: Cute Creepy Creature
取名「構自然」一方面是呼應「共自然」系列活動,另一方面則是 GH 本身在數位構築上的關連性。URS 89-6 位置絕佳,可惜老房子空間還是侷促了些,硬塞了 20 個人,已經是摩肩接踵的景況。另外,老房子電力線極其衰弱,21部筆電加投影機同時啟動,立刻掛掉了一個牆上的插座,幸好後來沒再出狀況,否則肯定開天窗。

由於多數人沒有 Rhino 經驗,還是花了點時間先概略介紹 Rhino 介面和操作基礎,所幸大家天資聰穎,沒用掉太多時間。接著就是 GH 的點、線、面建構與屬性,與 Rhino 物件的連結,幾何分割與數列,還有資料配對概念。沒多久就開始做蠕動大腸和狼牙棒,有點 creepy 感覺了。狼牙棒做完就改做章魚腳(紀念章魚哥保羅),一隻章魚腳還好,五條章魚腳就很 creepy 了。

跳轉看完整的工作坊相簿,警告!有怪怪噁心的造型,這是萬聖節一定要的fu啊。

2010-11-01

GH範例要加註版本資訊了

最近上課感覺愈來愈需要處理Grasshopper版本間差異的問題,從0.6到0.7差異相當大,幾天前又迸出個0.8版,相當頭大。常見問題包括:新增元件、舊元件取消、元件名稱改變、元件分類改變、軟體本身錯誤,最慘的是初學者從官方論壇下載學習手冊後,跟著手冊操作卻屢屢發生錯誤,這也是版本不相容問題啊~

為了負責任起見,未來po上來的範例,我都會加註版本,省卻大家各自嘗試錯誤的時間。

2009-12-09

使用pd的OSC物件

剛開始測試 pd 上的 OSC 時,遇到一點小問題。根據 pd 官方文件指出,pd-extended 原來的預設的 OSCX 版本已經不再更新,建議改用 mrpeach 的版本。原來的 OSCX 提供 sendOSC, dumpOSC, OSCroute 三個物件,簡潔易用但擴充性不足;而 mrpeach 的版本則提供 packOSC, unpackOSC, routeOSC 三個物件外,還提供 udpsend 和 udpreceive 物件收發封包,不僅擴充性良好、支援廣播、支援 UDP 與 TCP、還可以限制資料型態。

不過 pd-extended 0.41.4 的預設仍然是使用 OSCX,欲使用 mrpeach 的 OSC 物件庫,可以採用兩種載入方式,一是動態載入,二是預設載入。

動態載入是利用 import 物件在開啟 patch  時載入。新增一個 patch,在最頂端加入 import mrpeach 物件,儲存並關閉檔案。再次開啟該檔案時便可以使用 mrpeach 版的 OSC 物件庫了。

預設載入則需將物件庫加入 Startup 載入清單。開啟 Preferences > Startup... 後新增 mrpeach,重新開啟 pd 就 OK 了。

2009-05-14

尋找最接近的三頂點

牛小姐問了個很好的問題:「如何在一群點Pn中,找到最接近獨立點A的三個點?」

第一種方法,Grasshopper 有個 Closest Point 元件,可以用來找最接近的一點,找到點後,將該點從點群Pn中移除,再重複上述步驟兩次,就可以找到最接近的三個點。但是這顯然是效率不高的土方法,要找N個點就要重複N次,十分累贅。而且,Grasshopper 在 List 操作上還欠缺 Delete Item 這種元件,移除單一 item 還得自己寫 script。因為這個方法太過繁瑣,就不舉例了(我懶惰)。

第二種方法比較簡潔,基本上只要能算出點距,將之排序,依序取出前三點,問題就解決了。作法如下:


只要修改 Interval 就可以任意取出想要的點,很好用。

2009-05-10

自訂工作區顯示模式

Grasshopper 的工作區(workspace)裡提供了若干方便的小工具和顯示資訊方式,對於元件的建置與除錯,有很大的幫助。
  1. 首先是元件的顏色:灰色表示正常物件、橘色表示警告(但應該可以執行)、紅色表示錯誤(無法執行)。
  2. 顯示物件分佈狀況的羅盤(compass widget)。可以從主選單 View > Widgets > Compass 切換顯示。
  3. 選取元件後,可以使用對齊小工具(align widget)整理元件,看起來會舒服的多。可以從主選單 View > Widgets > Align 切換顯示。
  4. 接線顏色與線條樣式,顯示傳遞訊息的類型:單線表示單一資料、雙線表示資料串列(list)、雙線線段表示樹狀結構資料(tree)。線條顏色也承襲元件顏色,顯示資料是否有問題。接線樣式的顯示與否,可以從主選單 View > Draw Fancy Wires 切換。
  5. 元件可以用名稱或圖示顯示,從主選單 View > Draw Icons 切換顯示方式。
  6. 由於尺度的不同,有時候工作平面(Construction Plane; CPlane)的座標圖示變得太小或太大,此時可以用主選單中 View > Plane Radius 設定顯示大小。

2009-05-08

關於 Loft 元件

Grasshopper 裡的 Loft 元件如同一般建模軟體的 Loft 工具一樣,都提供了建模的額外選項,如果妥善運用這些選項,可以省下不少功夫(或麻煩)。
例如以三條曲線構成的曲面,左圖是正常(Normal)模式,右圖是鬆垂(Loose)模式。


2009-05-06

真正亂的亂數

程式裡的亂數是透過亂數產生器(random number generator)的運算結果。亂數產生器是一種演算法,它根據一個亂數種子(random seed)來產生後續的數字序列。兩個相同的 seeds 所產生的亂數序列會一模一樣。不幸的是 Grasshopper 裡的 Random 元件,每次初始 seed 值都一樣是 2,這代表什麼?代表它所產生的亂數根本不亂!你看~


要得到真正亂的亂數序列,就要改變 seed,也就是讓 seed 本身每次都不能相同、要夠隨機,但這不是變成「雞生蛋、蛋生雞」的問題嗎?放心,電腦科學界的前輩們已經有好方法了。就是將一個永遠會不斷往前數的計數器當做 seed,也就是時間。將電腦裡的時間當做 seed,由於時間會不斷改變,可以確保 seed 的不確定性。

不過 Grasshopper 裡沒有取得系統時間的元件,得靠程式元件來做到。這裡我們用 C# 元件示範:


C# 函式的內容很簡單:A = System.DateTime.Now.Millisecond;
用意是取得目前時間的毫秒。當然 0-999 的範圍內還是有可能重複,但起碼夠亂了。如果要亂個徹底,可以拿系統時間(System Time)來用。左邊的 Slider 只是用來觸發 C# 元件重新計算,沒有實際作用。

[2010-03-10更新]
為了取得更亂的亂數,可以改用 Ticks。Ticks 是不斷累計的系統時鐘,是個非常大的整數,以我的電腦為例,每秒鐘有一千萬個Ticks,實在足夠了。
只要把上述函式改為 A = System.DateTime.Now.Ticks % 10000000;
便可取得 1~9999999 之間的一個整數。其實這個整數本身就已經夠亂了,可以直接使用。