2016-05-29 85 views
0

我正在使用多邊形鏈來近似曲線。我想逼近曲線上所有點的曲率函數的平均值。我需要的一個曲率函數是,例如曲率的平方。計算具有不均勻分段長度的多邊形鏈的平均曲率

我可以通過選擇鏈上的某些點,計算這些點的曲率,對其應用函數(例如對其進行平方),然後對所計算的值進行平均來得到接近的結果。

我需要準確性和速度。我欣賞這兩個 - 快速,但近似;以及準確但緩慢的解決方案。我正在使用Java,但答案不需要用Java編寫 - 甚至根本不需要包含任何代碼。

具有均勻段長度

如果多邊形鏈的段都具有相等的長度多邊形鏈,我可以計算頂點的曲率和進行平均這一點。我看到了兩種方法來獲得頂點的曲率。

一種方法是獲取通過選定頂點,頂點之前和之後的頂點的圓。曲率是1 /半徑的圓。

另一種方法是計算在所選擇的頂點連接的兩個區段的外部角度(以弧度爲單位),然後通過一個段的長度除以它的絕對值。在下圖中,φ標誌着外角:

我不知道如果此方法是正確的,因爲我沒有數學推導,但它提供了一種類似於我已經通過實驗發現結果到上面的方法。

具有非均勻段長度

多邊形鏈不幸的是,有沒有保證該段有統一的長度。

如果我嘗試使用上述第一種方法,連接到較長段的頂點給出較低的曲率,即使它們明顯更清晰。我嘗試用所選頂點之前的一個點x單位和點之後的一個點x單位替換前一個和下一個頂點。我不知道如何設置x不變,以獲得準確的結果。我試過的所有值似乎都給出了不準確的結果。

如果我嘗試使用第二種方法,我不知道用什麼長度來分割角度。如果我根本沒有分割任何東西,我實際上得到相當好的結果來比較兩條曲線並確定哪條曲線更加曲線,但我需要能夠確定一個點的實際曲率。

有了這兩種方法,還有一個問題,即具有較短段(其中點較密集)的部件會對平均值影響更大。

另一個可能的解決方案是忽略頂點,而是使用均勻間隔的鏈條上的一系列點,將它們視爲新的多邊形鏈(用直線連接點),然後計算曲率在這個新的鏈條上,使用我在標題爲「具有均勻鏈段長度的多邊形鏈」標題下提到的方法之一。然而,找到這樣一個點的數組並不是微不足道的,因爲我必須選擇一個段的長度,並且只有在產生這些點之後,我才能看到所得到的鏈的長度是否可以被選定的段長度整除。

回答

1

如果你不是空間不足,你提到的最後的解決方案是最好的,因爲「球」逼近,爲你也許意識到,將給予更極端的情況下可怕的結果,尤其是曲率很大或變化很快。

有很多方法可以做到插值,其中最簡單的二次和三次樣條。但是,如果你有更多的前處理時間,拉格朗日多項式產生了很好的效果:https://en.wikipedia.org/wiki/Lagrange_polynomial。在你的角度劃分方法


側面說明,認爲這個圖:

enter image description here

(從簡單的幾何形狀的內角有 THETA)

enter image description here

對於a << l。所以曲率:

enter image description here

所以你逼近其實正確爲小曲率。

+0

感謝您的回答。 :)但我需要一些澄清。通過「最後一個解決方案」,你的意思是找到一個新的數組* *是*等間距的?這不是一個完整的解決方案。如果我這樣做,我只能將問題減少到計算具有*統一*段長度的多邊形鏈的平均曲率。我仍然必須使用1/circle_radius或角度/長度方法。 所以,你是在暗示我找到一個新的,類似的鏈條,一個是確實有統一的長度的線段,然後使用角度/長度的方法,因爲球近似可以給壞的結果。那是對的嗎? – user2623008

+1

@ user2623008我建議你計算出一個新的等距陣列具有良好的(但可能是昂貴的,像拉格朗日事)方法,_if只有if_你不介意,我已經試過了預計算時間 – 2016-05-31 16:48:21

+0

這樣做有卡特莫爾-Rom樣條曲線,但我遇到了一些問題。如果我在Catmull-Rom樣條上取兩個* d *單位的點,則它們可能在用直線連接時彼此更接近,這意味着生成的多邊形鏈可能在段長度上不均勻。如果我試圖找到樣條曲線上實際上間隔相等(用直線)的點,則計算起來會更昂貴,最後一點可能與原始點的最後一點不同。但是,對於一個新問題,這已經成熟了。再次感謝您的幫助。 :) – user2623008

1

一種替代方法是使用局部拋物線近似來估計曲率。基本上,爲了估計點P(i)處的曲率,可以取P(i-1),P(i)和P(i + 1)並從這3個點構造一個拋物線。然後,從拋物線計算P(i)處的曲率。請記住在構建拋物線時使用弦長(或向心)參數化。

+0

感謝您的回答。是的,對於具有統一線段長度的多邊形鏈來說,這確實是一種有效的方法。你認爲這會比用圓圈做更好嗎?曲率通常被定義爲半徑的倒數,所以一個圓是我想到的第一個東西。另外,我認爲我需要四點,因爲有三點無限多的拋物線。 – user2623008

+1

你只需要3分來創建一個拋物線,拋物線基本上是一個2次多項式。根據我的經驗,使用拋物線的局部近似將比使用圓弧獲得更好的結果。但總有例外。 – fang

+0

感謝您的回覆。是的,你是對的,你只需要三點。我不知道我在想什麼。 – user2623008