我有兩個形狀是通道的橫截面。我想計算兩個定義點之間的中間點的橫截面。 在這種情況下使用什麼最簡單(相對簡單?)算法?二維插值算法
P.S .:我遇到了像自然鄰居和泊松這些看起來很複雜的算法。我正在尋找一個可以快速實施的簡單解決方案。
編輯:我從標題刪除單詞「最簡單」,因爲它可能是誤導性的
我有兩個形狀是通道的橫截面。我想計算兩個定義點之間的中間點的橫截面。 在這種情況下使用什麼最簡單(相對簡單?)算法?二維插值算法
P.S .:我遇到了像自然鄰居和泊松這些看起來很複雜的算法。我正在尋找一個可以快速實施的簡單解決方案。
編輯:我從標題刪除單詞「最簡單」,因爲它可能是誤導性的
這是簡單的:
簡單仍然:無需修改現有的橫截面的
這個第二個建議可能太簡單了,但我敢打賭,沒有人建議更簡單的建議!
編輯以下OP的評論:(太多了再評論)
嗯,你沒問一個簡單的方法!我不確定我是否看到與第一種方法相同的問題。如果橫截面不是太奇怪(如果它們是凸多邊形,則可能是最好的),並且您不會做任何奇怪的事情,比如將一個橫截面的左側映射到另一個橫截面的右側(從而迫使大量交叉線)那麼該方法應該產生某種明智的橫截面。如果您建議使用三角形和矩形,假設三角形坐在其底部,頂部有一個頂點。將該地圖指向矩形的左上角,然後圍繞連接相應點的兩個橫截面的邊界以相同方向(順時針或逆時針)繼續。我沒有看到任何交叉線,並且我在兩個交叉部分之間的任何距離都能看到明確的形狀。
第二個肯定太簡單:) 第一個算法是依賴於形狀的周長,並在某些情況下會失敗s.a.從一個矩形變形爲一個三角形。兩個橫截面上的點不會重疊正確 – Gayan 2010-03-16 08:32:17
明白了。在提出以前的評論時,我誤解了第一種方法。謝謝。 – Gayan 2010-03-16 09:19:35
+ 1 - 第一個解決方案看起來是正確的。請注意,均勻間隔的間隔是不必要的(並且通常是不可能的);你只需要在兩者上選擇一個相應的點(例如頂部中心),然後繞過兩個形狀,在另一個缺失的地方添加頂點。例如,矩形1x2矩形的頂點可能在1/6,2/6,4/6和5/6處;等邊三角形可能在1/3 = 2/6和2/3 = 4/6處具有它們,所以它需要在1/6和5/6的周圍(即第一邊和最後邊的中點)。 – 2010-03-16 15:00:37
請注意,高性能標記的答案有些含糊不清,您可能需要解決並將定義其方法輸出的質量。最重要的一點是,當你在兩個橫斷面上繪製點時,你認爲它們之間有什麼樣的對應關係,也就是說,如果你這樣做的話,建議使用高性能標記,那麼標記點的順序就變得很重要。
我建議同時通過兩個橫截面旋轉(正交)平面,然後在一個橫截面上與該平面相交的一組點與一個橫截面上與該平面相交的一組點相匹配。假設這些集合中的點數沒有限制,但它肯定會降低原始情況下通信問題的複雜性。
這是另一個嘗試解決問題的方法,我認爲這是一個更好的嘗試。
鑑於兩個橫截面C_1
,C_2
將每個C_i
與座標系(x,y)
使得它們位於相對的方式是有意義的全局參考幀。將每個C_i
分成上下曲線U_i
和L_i
。這個想法是,你會想要連續變形曲線U_1
到U_2
和L_1
到L_2
。 (請注意,如果您願意,可以擴展此方法以將每個C_i
分割成m
個曲線。)
執行此操作的方法如下。對於每個T_i = U_i, or L_i
樣本點n
,並確定插值多項式P{T_i}(x)
。正如下面適當指出的那樣,插值多項式特別是在端點處易受振盪影響。取而代之的是內插多項式,可以使用最穩定的最小二乘擬合多項式。然後定義多項式P{U_1}(x) = a_0 + a_1 * x + ... + a_n * x^n
的變形P{U_2}(x) = b_0 + b_1 * x + ... + b_n * x^n
作爲Q{P{U_1},P{U_2}}(x, t) = (t * a_0 + (1 - t) b_0) + ... + (t * a_n + (1-t) * b_n) * x^n
其中變形Q
之上0<=t<=1
其中t
定義定義在該點處的變形在(即,在t=0
我們在U_2
和t=1
我們在U_1
和在每個其它t
我們處於兩個連續的變形。) Q{P{L_1},P{L_2}}(x, t)
完全相同。這兩個變形構成了兩個截面之間的連續表示,您可以在任何t
處進行取樣。
注意,所有這些確實是在對兩個橫截面的插值多項式的係數進行線性插值。還要注意,在分割橫截面時,您應該將約束條件放在相匹配的端點上,否則在變形中可能會出現「孔」。
我希望清楚。
編輯:解決了插值多項式中的振盪問題。
橫截面是否總是凸多邊形?或者他們可以凹嗎? – 2010-03-16 09:14:19
橫截面可以由凸面和凹面兩部分組成。 – Gayan 2010-03-16 09:23:16
我想知道是否有高性能標記給出的解決方案 – Gayan 2010-03-16 11:30:51