2012-06-05 94 views
3

我已經獲取了xyz點格式的表示3D表面(即地震斷層面)的數據。我想創建這些表面的3D表示。我已經使用rgl和akima取得了一些成功,但是它不能真正處理可能折回自己或者在同一個x,y點具有多個z值的幾何。或者,使用geometry(來自qhull的convhulln函數),我可以創建在rgl中很好地顯示的凸包,但這些是封閉的表面,實際上,這些對象是開放的(不要完全包圍點集)。有沒有辦法創建這些曲面並渲染它們,最好是使用rgl?呈現3D表面

EDIT

爲了澄清,該點是點雲限定的表面。它們在整個表面上具有不同的覆蓋密度。但是,主要問題是表面是單側的,而不是閉合的,我不知道如何生成一個網格/曲面,而這個網格/曲面並不適用於更復雜的幾何體。

舉個例子...

require(rgl) 
require(akima) 
faultdata<-cbind(c(1,1,1,2,2,2),c(1,1,1,2,2,2),c(10,20,-10,10,20,-10)) 
x <- faultdata[,1] 
y <- faultdata[,2] 
z <- faultdata[,3] 
s <- interp(x,z,y,duplicate="strip") 
surface3d(s$x,s$y,s$z,col=a,add=T) 

這通常創建我想要的東西。但是,對於更復雜的飛機,這不一定有效。例如其中的數據是:

faultdata<-cbind(c(2,2,2,2,2,2),c(1,1,1,2,2,2),c(10,20,-10,10,20,-10)) 

我不能使用這種方法,因爲點都是垂直共面的。由於相同的問題,我也不能使用convhulln,一般來說我不想要一個封閉的船體,我想要一個表面。我看着alphashape3d,它看起來很有前途,但我不知道如何去解決這個問題。

+0

您可能對基於WebGL的lib感興趣,如[PhiloGL](http://philogb.github.com/)。這[demo](http://www.senchalabs.org/philogl/PhiloGL/examples/temperatureAnomalies/)很吸引人 – CapelliC

+0

你當然可以在rgl(它提供你需要的所有圖形原語)中做到這一點,它只是更難(因爲不是預打包的)比上面給出的任何一個示例(單面,凸包)。如果您發佈示例數據,有人可能會給它一個鏡頭...... –

+0

輸入是點雲嗎?你能提供一個示例圖片來了解密度的概念嗎? – sloriot

回答

2

你如何確定點如何連接在一起作爲一個表面?距離?這可能是一種方法,並且alphashape3d包可能有用。否則,如果您確切知道如何連接,那麼您可以直接用rgl結構直觀顯示它。

+0

我有一系列定義相應故障表面上的點的點。它們由地質學家/地震學家定義,他們基本上在空間中創建了定義地表的點雲。它們在整個表面上具有不同的覆蓋密度。有些僅僅是飛機邊緣的稀疏覆蓋,另一些覆蓋了對邊緣的非常詳細的覆蓋以及在許多點上定義的起伏的3D面部。但是我的主要問題是,我不知道如何創建一個可以從點雲中渲染出來的單向曲面,但它本身並沒有關閉。 – DWAHL

+0

我會在你的問題中展開這個細節並進行說明,它會幫助別人回答它。 – mdsumner

+0

嗯,我認爲大部分使用alphashape3d和玩其他零件讓我接近我想要的。這有點讓人頭疼,因爲我必須手動改變α因子,直到我得到對我所具有的幾何圖形有意義的東西,但是我可以通過分析點雲來稍微優化它。還有一些特定的奇怪錯誤的問題,但我認爲它主要是格式化。謝謝。 – DWAHL