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 之間的一個整數。其實這個整數本身就已經夠亂了,可以直接使用。

RhinoCAM到貨


兩週前 CNC Milling 雕銑機設置完成後,才發現沒有像樣的刀路設計與規劃軟體,趕緊請 Yoko 協助訂購 RhinoCAM,今天終於到貨,可以正式開始測試和教育訓練。可惜 syuan 因為案子忙,沒辦法長時間協助規劃教材,我還是得想辦法壓榨他在 ETH 的實戰經驗來嘉惠學生。

RhinoCAM 教育版其實是 Pro 全功能版,支援各種三~六軸 CNC 切削機具,我們就一台小小的三軸 CNC,有點殺雞用牛刀的感覺。RhinoCAM 是 Rhino 的外掛模組,需要 Rhino 4.0 SRb4 以上版本。包裝中附有一個硬體鎖(dongle)作為網路認證之用,可供五部電腦同時使用 RhinoCAM。

安裝步驟:
  1. 先檢查是否已經安裝 Rhino 4.0 SR4b 以上版本。
  2. 在 server 和 clients 上都安裝 RhinoCAM 和 Sentinel 硬體鎖驅動程式。
  3. 在 server 上安裝授權服務,執行 C:\Program Files\Rhinoceros 4.0\Plug-ins\RhinoCAM 2.0\RainbowServerInstaller.exe。
  4. 在 clients 上的 Windows 作業系統中新增系統變數(System Variable),變數名稱為 VMILL_LISENCE_HOST,變數值為 server IP。
啟用步驟:

首次開啟 server 上的 RhinoCAM 需要進行授權認證,回傳母公司後,會收到兩組認證碼,用來完成啟用程序。待 server 端啟用完成後,clients 端即可使用。

2009-05-05

平面上封閉曲線的面積

如何求得平面上封閉曲線的面積呢?既然共面,封閉曲線自然可以形成封閉區域,便可取得面積。正規的作法是:先以封閉曲線作為邊界(boundary),產生一封閉區域(即一 Surface),然後取得該 Surface 的面積。

所需元件:
  1. Params/Geometry/Curve
  2. Surface/Freeform/Planar Srf
  3. Surface/Analysis/BRep Area
  4. Params/Special/Panel
將上述元件依序接起來就可以了 Curve -> Planar Srf -> BRep Area -> Panel,記得要將 1. Curve 的內容指向 Rhino 中的一條封閉曲線,才會有資料來源。此外,由於 BRep Area 元件也支援輸入封閉曲線,即可以省略元件 Planar Srf,變成 Curve -> BRep Area -> Panel。