2011-03-29 73 views
2

我有一個List 2D點。爲了確定點的列表是直線還是曲線(以及到什麼程度),什麼是遍歷點的有效方法。我想避免簡單地在較小的子集之間獲得斜率。我會如何去做這件事?從點獲取曲線細節

感謝所有幫助

編輯:感謝您的答覆。爲了澄清,我不需要它在數值上是準確的,但我想確定用戶是否用鼠標創建了一個彎曲的形狀,如果是這樣,則曲線有多清晰。這些值並不太重要,只要可以確定一個尖銳曲線和一個稍軟的曲線之間的差異即可。

回答

1

如果你只是想知道如果所有的點適合d度曲線上或多或少,只需在端點和d-2等距點從陣列中應用拉格朗日插值。這會給你一個程度爲d的多項式。

一旦你有你的曲線,只需遍歷數組,並看看每個點離曲線有多遠。如果它們超過閾值,則您的數據不適合您的學位d多項式。

編輯:我應該提到,通過d的值重複是一個有限的過程。一旦d達到您所擁有的點數,由於拉格朗日插值的工作原理,您將獲得完美的匹配。

0

真正的問題是朦朧的位置:「我想,以避免小substes之間僅僅讓坡」

你可能想插的-LA B樣條。如果記憶爲我服務,他們使用兩點和兩個額外的控制點。自從回溯以來(至少在20世紀80年代),實現方式無處不在。這應該讓你進行中

請記住,您可能需要添加控制點才能使曲線符合端點。確保達到目標的一個竅門是簡單地將終點複製爲額外的控制點。

乾杯

更新添加鏈接codeproject 它會出現什麼,我從後記得在上世紀80年代可能是貝塞爾曲線 - 各種各樣的前身。

1

要測試它是否是直線,請計算相關係數。我敢肯定,這涵蓋了維基百科。

測試它是否彎曲更多參與。你需要知道你期望的曲線類型,並且適合這些曲線。

1

這裏是計算角度的方法:Calculate Angle between 2 points using C#

簡單地計算每個點之間的角度在列表中,並創建角度的名單,然後進行比較,如果角度列表值是不同的。如果他們沒有不同,那麼這意味着它是直線,否則它的曲線...

如果它是一條直線,那麼所有點之間的角度必須相同。

+1

我總是需要3點來計算角度。 2如何處理? – 2011-03-29 19:14:58

+0

point1 = x1,y1 point2 = x2,y2 - 可以計算這2個點之間的夾角 – HABJAN 2011-03-29 19:16:20

+0

舍入誤差有點棘手,但足夠接近。 – 2011-03-29 20:01:27