我正在製作一個圖形應用程序,我可以通過拖動它的控制點來編輯多段線。 但是,我想通過使它變得有彈性來使它更容易使用;當拖動一個控制點時,而不是移動一個點,我希望這個點的某個距離內的點也可以移動,這取決於控制點被「拉動」的程度。彈性/蛇形線算法
有沒有人知道一個簡單的算法呢?這可能是非常基本的,因爲主要的要求是速度。
其實,知道如何調用這樣的行爲也會很好,所以我可以在谷歌上查找它。我嘗試了'snaking'這一行,但這似乎是指活動的輪廓,這不是我正在尋找的。
感謝
我正在製作一個圖形應用程序,我可以通過拖動它的控制點來編輯多段線。 但是,我想通過使它變得有彈性來使它更容易使用;當拖動一個控制點時,而不是移動一個點,我希望這個點的某個距離內的點也可以移動,這取決於控制點被「拉動」的程度。彈性/蛇形線算法
有沒有人知道一個簡單的算法呢?這可能是非常基本的,因爲主要的要求是速度。
其實,知道如何調用這樣的行爲也會很好,所以我可以在谷歌上查找它。我嘗試了'snaking'這一行,但這似乎是指活動的輪廓,這不是我正在尋找的。
感謝
基本上你正在尋找一種方法來移動(變形/變換)多個點。
我們假設你已經給出了移動的方向和強度,這將導致點x,y的dx,dy。
您的轉型將至少有兩個以上參數
對於線性內插受影響將根據下面的公式移動點:
- [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
在一個簡單的層面上,你可以有一點點幫助的形式胡克定律實現這一目標。如果壓扁
ooooooooo
每個頂點由一個彈簧,如果拉長,這將收縮和擊退連接到另一個頂點:基本上你可以查看你的折線作爲一個字符串,由通過彈簧連接頂點的負荷。因此,當控制點移動時,連接的彈簧將展開(拉伸)或收縮(收縮)。這反過來將力量施加到共享那個彈簧的任何頂點。因此,如果我將第一個頂點向上拉並離開,彈簧會向右側的頂點施加一個力,將其拉近。這繼續到下一個(有一些消耗能量),直到所有彈簧都「舒適」。
這就是它的基礎知識,每次控制點移動時,都需要將方程解決到所有頂點/彈簧,並且點將爲您「蛇」。
如果您想了解更多有關'繩子物理'或'布料物理'的示例(作爲繩子是一維布料)。很明顯,儘管忽略重力的目的。
謝謝你,在閱讀了關於這個繩索物理學的知識後,就像你所做的那樣得出了結論;這顯然不是我正在尋找:) 但是,你建議的方法是現貨。我用可變半徑實現了它(移動強度的兩倍),這似乎很有效。 – vhdirk 2010-06-11 19:55:52