2009-12-28 41 views
8

我在每個點(能量)上都有一個3D空間(x,y,z),並給出了總共4個維度的數據。在3D空間中插值標量場

我想找到一組x,y,z點,它們對應於通過在已知點之間進行插值而找到的等能面。

的空間網具有恆定的間距和完全包圍所述等能量表面,然而,它不佔據立方體空間(網格佔據大致圓筒狀的空間)

速度不是關鍵的,我可以將此數字嘎吱嘎吱一陣子。儘管我使用Python和NumPy編碼,但我可以在FORTRAN中編寫代碼的一部分。如果存在這樣的庫,我還可以包裝現有的C/C++/FORTRAN庫以用於腳本。

迄今爲止我在網上找到的所有示例和算法(以及在Numerical Recipes中)都沒有提供4D數據。

+0

BTW - Numerical receipes的算法在最新版本中涵蓋了這一點 - 您仍然只處理3D數據,即:存儲在單個3D位置的數據。在數值信息中的所有徑向基函數內插器都適用於此,並在3D中討論(最多擴展到nD)。 – 2009-12-29 00:13:07

+0

是的你是對的。我的版本是1992年,但它提供了用於nD插值的配方(或2D類比),前提是網格具有'列表函數值...在矩形陣列的頂點處'。我的印象是,由於網格(這是公認的,在精細的水平上,均勻分佈着矩形週期)填充了一個大致圓柱形的空間,這些技術不適用。 – Brendan 2009-12-29 12:47:07

回答

8

有相當這裏幾個選項...

爲了讓你的精力投入到你的網,你需要使用某種形式的內插。 Shepard's method是一種常用且相當簡單的實現方法,如果您的數據分佈合理,則趨向於正常工作。

一旦你完成了,你需要做一些形式的isosurface世代。

這裏有一些圖書館可以使這一切變得簡單。最值得注意的是,VTK包含python包裝,並具有執行這兩個步驟所需的所有工具。

有關如何在VTK中完成此操作的詳細信息,可以查看vtkShepardMethodvtkContourFilter

1

爲什麼不嘗試四次插值?

擴展由另一維度的三線內插。只要線性插值模型適合您的數據,它就可以工作。

2

由於您有一個具有恆定間距的空間網格,因此您可以識別等值面兩側的所有鄰居。選擇某種形式的插值(q.v. Reed Copsey的答案)並沿着每個這樣的鄰居之間的界線進行根查找。