2010-06-09 28 views
2

我正在製作一個圖形應用程序,我可以通過拖動它的控制點來編輯多段線。 但是,我想通過使它變得有彈性來使它更容易使用;當拖動一個控制點時,而不是移動一個點,我希望這個點的某個距離內的點也可以移動,這取決於控制點被「拉動」的程度。彈性/蛇形線算法

有沒有人知道一個簡單的算法呢?這可能是非常基本的,因爲主要的要求是速度。

其實,知道如何調用這樣的行爲也會很好,所以我可以在谷歌上查找它。我嘗試了'snaking'這一行,但這似乎是指活動的輪廓,這不是我正在尋找的。

感謝

回答

2

基本上你正在尋找一種方法來移動(變形/變換)多個點。

我們假設你已經給出了移動的方向和強度,這將導致點x,y的dx,dy。

您的轉型將至少有兩個以上參數

  1. 半徑r在該點會受到影響
  2. 由於中間的點會影響更多的邊緣,你應該定義如何內插衰減(線性,正態分佈等...)

對於線性內插受影響將根據下面的公式移動點:

- [R [I] = SQRT(SQR(XX [I])+ SQR(YY [I]))

所以如果r [I] <ř

X [I] '= X [1] + DX *(1-R [I]/R) 值Y [i]'= Y [i]於+ dy *(1-r [i]/r)

這是用於線性插值dx [i] = dx-r [i]/r

+0

謝謝你,在閱讀了關於這個繩索物理學的知識後,就像你所做的那樣得出了結論;這顯然不是我正在尋找:) 但是,你建議的方法是現貨。我用可變半徑實現了它(移動強度的兩倍),這似乎很有效。 – vhdirk 2010-06-11 19:55:52

4

在一個簡單的層面上,你可以有一點點幫助的形式胡克定律實現這一目標。如果壓扁

ooooooooo

每個頂點由一個彈簧,如果拉長,這將收縮和擊退連接到另一個頂點:基本上你可以查看你的折線作爲一個字符串,由通過彈簧連接頂點的負荷。因此,當控制點移動時,連接的彈簧將展開(拉伸)或收縮(收縮)。這反過來將力量施加到共享那個彈簧的任何頂點。因此,如果我將第一個頂點向上拉並離開,彈簧會向右側的頂點施加一個力,將其拉近。這繼續到下一個(有一些消耗能量),直到所有彈簧都「舒適」。

這就是它的基礎知識,每次控制點移動時,都需要將方程解決到所有頂點/彈簧,並且點將爲您「蛇」。

如果您想了解更多有關'繩子物理'或'布料物理'的示例(作爲繩子是一維布料)。很明顯,儘管忽略重力的目的。

+0

非常感謝,這正是我所需要的。 – vhdirk 2010-06-09 10:35:04

+0

@ vhdirk/davbryn,我懷疑這是你需要的;胡克定律不能模擬多段線的控制點將如何移動,也不能建立一組方程來解決沒有進一步的條件(這將決定實際行爲)。繩索物理學和布料物理學也更多地涉及重力場中的不可拉伸材料和/或施加外力(更多關於它形成的形狀)以及(imo)太複雜。 – Unreason 2010-06-09 13:12:11