2014-10-27 51 views
0

我使用B樣條曲線擬合來獲得一條平滑曲線。如果我獲得兩個光滑的B樣條,那麼我怎麼才能順利連接。例如,我有59個點((x0,y0,z0),...,(x58,y58,z58)),並且我有兩個擬合的B樣條。一個B樣條爲前30個點,另一個爲後30個點,兩個點共有一個公共點((x29,y29,z29))。由於曲線擬合,點(x29,y29,z29)將被修改兩次,並且會有兩個新的位置。如果我只連接兩個新位置,最終曲線在點(x29,y29,z29)處將不平滑。目前,我一起對所有數據執行曲線擬合,但會完全修改前30個點的平滑曲線。我希望只修改第一條平滑曲線的連接部分。我知道我需要在關節處施加相等的衍生物。我不知道該怎麼做。如何連接兩個擬合的B樣條曲線?

回答

1

看起來你正在用B樣條曲線或類似的東西做LS擬合,並且通常這樣獲得的B樣條不會通過任何數據點。這就是爲什麼兩個B樣條不符合共同點。

要解決此問題,您可以增強您的LS擬合功能,以將約束作爲輸入的一部分。在你的情況下,這些約束是線性的,因此你的問題仍然是線性的。完成此步驟後,可以預先計算公共點處的斜率,並約束B樣條曲線擬合公共點和常見斜率。這樣獲得的兩個B樣條至少在公共點處是G1連續的。儘管如此,實現受約束的LS擬合併不是一項簡單的任務,在這裏也不容易闡述。所以,你必須自己做一些「谷歌搜索」。另一種解決方案是「調整」兩個B樣條,使它們以G1方式連接。但是這樣做肯定會增加擬合誤差,因爲最小平方誤差的感覺被破壞了。通過「調整」,我打算在本地更改B樣條的控制點。在下面我會提供更多細節。假設有兩個B樣條C1(t)和C2(t),C1(t)的最後兩個控制點分別是P(n-2)和P(n-1),前兩個控制點C2(t)的點是Q(0)和Q(1)。假定P(n-1)和Q(0)接近兩個數據集的公共點(x29,y29,z29)。調整B樣條曲線僅僅意味着改變P(n-2),P(n-1),Q(0)和Q(1)的位置,使得這兩條B樣條曲線將以G1方式相交。要做到這一點,

1)我們首先通過移動P(n-1)和Q(0)到相同的位置,它可以是(x29,y29,z29)或簡單的P (n-1)和Q(0)。我們將這個新位置表示爲R.

2)現在檢查P(n-2),R和Q(1)是否共線。如果它們碰巧是共線的,那麼兩條B樣條曲線也將是G1,並且你完成了。如果它們不是共線的,則找到從P(n-2)和Q(1)通過R的最佳近似線,然後將P(n-2)和Q(1)投影到該線上,並使用投影點作爲P(n-2)和Q(1)的新位置。

經過這兩步後,這兩條B樣條曲線應該以G1方式連接。但是常見關節周圍原始數據點的誤差會變大。

+0

您的回覆對我很有幫助。你能澄清關於調整兩個B樣條的想法嗎?我正在考慮使用這種方法,因爲最小平方不重要。最好給一些鏈接或文件。 – 2014-10-29 07:17:10

+0

目前我正在閱讀論文:http://www1.eafit.edu.co/cadcamcae/documents/BiCurve_MultiPatch_AnalesIngGrafica_2008.pdf – 2014-10-29 09:01:18

+0

@OP:我在關於如何調整B樣條以實現G1連續性的答案中增加了更多內容。 – fang 2014-10-29 20:23:21