2011年5月29日 星期日

[msd] 的使用方式一

[msd]的開發者是知名pd創作團隊chdh的Nicolas Montgermont在2006所開發的。

[msd]下載網頁

[msd]的主要物件有三種,分別為[msd],[msd2D],[msd3D],這三個物件的差異其實並不大,[msd2D]比[msd]多了Y軸,[msd3D]又比[msd2D]多了Z軸這維度。

使用msd必須宣告mass和link的數量以及大小,他們的連結方式可以自定,最基本的範例如下圖。


我們自定三個mass,並且決定它們的連結方式為mass--mass--mass,以類似火車車廂的方式連結。

所以在pd中我們可以這樣撰寫(如下圖)


一開始先送reset給[msd],接下來我們把三個自定的mass給一樣的命名和參數,參數的意義:

[mass $1 $2 $3 $4(
$1:身分(string)
$2:固定或是可移動(0 or 1)
$3:質量
$4:初始位置

所以[mass M1 1 100 50(的意思為,建立一個名叫M1的mass,他是可以被連動的,並且質量為100,x初始值為50。

並且用link將三個"M1"連結起來,link參數的意義為:

[link $1 $2 $3 $4 $5 $6 $7 $8(

$1:身分 (string)
$2:身分 第一個質量(int)
$3:身分 第二個質量(int)
$4:剛體
$5:阻尼
$6:剛體距離的力量
$7:最小長度的連結
$8:最大長度的連結

所以[link l1 0 1 10 10(的意義為,建立一個連結索引值為0跟1的mass,並且將這個鏈結命名為l1,它的rigidity為10,damping也為10。

連結圖示如下

最後送出[Xmax 100,Xmin 0(限定x軸的最大值100最小值0。

接下來為了讓[msd]運作,我們必須送[bang]去觸發msd,必且選擇你要msd回應什麼?

上圖的patch,[msd]會輸出massesPosL訊息出來。上圖範例輸出的結果會是[massesPosL 50 50 50(,這代表三個m1值都是50。

而[msd]能輸出的訊息包括:

[infosL(,輸出所有訊息
[massesPosL(,用list的方式輸出x軸的值大小。
[massesForcesL(,用list的方式輸出作用於mass的力。

[get massesPos(,條列輸出mass的索引編號,還有x軸大小,如果以上圖範例會得到:
[massesPos 2 50,massesPos 1 50,massesPos 0 50)
[get massesPos $1(,輸出特定mass的x軸值。($1在這範例中,能填的值有0,1,2),如果用[get massesPos 1(,在本範例會得到,[massesPosNo 1 50)。

最後透過送出[posX 0 $1(,這訊息去控制索引值為0的mass,而索引值1,2的mass也會受到連動而改變自己的X軸的值大小。