2012-09-21 73 views
2

我有x,y,z格式的數據點。它們形成了一個封閉流形的點雲。我如何使用R-Project或Python插入它們? (如多項式樣條)如何內插3D座標

+1

一個封閉的流形是拓撲等價於一個球體的東西嗎?沒有孔或邊緣?通常的做法是對錶面進行三角測量,首先,形成三角形...您是否查看過任何三維可視化軟件包? – Spacedman

+0

有很多方法。雖然不太清楚x,y,z格式的含義。如果你描述一個函數f(x,y)= z,並且當x和y的點數相同時,你可以試試akima包:http://cran.r-project.org/web/packages /akima/index.html –

回答

1

「緊湊型流形」是指像3D軌跡或表面嵌入3d的低維函數嗎?根據您想要的「參數」或「非參數」的方式,R中的表面問題有多種選擇。可以在估計平均值f(x,y)的框架內應用各種迴歸樣條,如果這些值「緊密」分佈,則可以得到相對準確和簡單的總結估計。有幾種非參數方法,例如在包「locfit」,「akima」和「mgcv」中找到的方法。 (我不太確定我將如何去統計估計3維空間中的1-D流形。)

編輯:但是如果我確實想看到3D分佈並且瞭解是否是參數曲線或軌跡,我會達到package:rgl,並將其繪製在可旋轉的3D框架中。

如果你想要形成凸包(爲此插值詞可能是錯誤的選擇),那麼我知道有2-d解決方案,並且懷疑搜索也會找到3-d解決方案。構建正確的搜索策略將取決於到目前爲止2條評論所反映的具體情況。如果你想使用迴歸工具來創建邊界,我試圖模擬像第一和第99百分位數這樣的更低和更高階數據作爲(x,y)函數的嘗試。 Roger Koenker有一個分位數迴歸包,'rq'得到了很好的支持。

4

這取決於最初表示的點數。只有一個點陣通常不足以導出原始流形。你需要知道哪些點在一起。

最常見的底層邊界表示(「brep」)是一束三角形。這是例如什麼OpenGL和Directx作爲輸入。我寫了一個Python software,可以將STL格式的三角網格轉換爲一個PDF圖像。也許你可以適應你的目的。內插一個三角形通常不是必須的,但是可以做的事情很多。在兩個原始點之間的中途創建三個新點。這三點形成一個內三角形,其餘的表面形成三個三角形。因此,你已經將一個三角形變成了四個三角形。

如果點是樣條曲面片控制點(如NURBS,或Bézier surfaces),必須知道哪些點一起形成的貼劑。由於這些參數曲面,一旦知道控制點,就可以確定曲面上的所有點。以下是Bézier曲面的功能。參數u和v是曲面的參數座標。它們沿着補丁的兩個正常邊緣從0運行到1。控制點是k_ij。

formula of Bézier patch

在B功能是針對每個控制點權重函數;

weight functions

假設你想要的10×10個網格近似貝塞爾表面。要做到這一點,您必須評估函數p u和v在10個步驟中從0運行到1(通過numpy.linspace輕鬆完成步驟)。

對於每個(u,v)對,p返回一個3D點。

如果要將這些點可視化,可以使用matplotlib中的mplot3d