渲染3D曲面

时间:2012-06-05 23:32:39

标签: r 3d geometry geometry-surface

我有以xyz点格式表示3D表面(即地震断层面)的数据。我想创建这些表面的3D表示。我使用rgl和akima取得了一些成功,但它无法真正处理可能折叠回自身的几何体或者在同一个x,y点处具有多个z值的几何体。或者,使用几何(来自qhull的convhulln函数)我可以创建在rgl中很好地显示的凸包,但是这些是封闭的表面,实际上,对象是打开的(不完全包围点集)。有没有办法创建这些表面并渲染它们,最好是在rgl?

修改

为了澄清,这些点位于定义表面的点云中。它们在整个表面上具有不同的覆盖密度。然而,主要问题是表面是单侧的,而不是封闭的,我不知道如何生成一个未关闭更复杂几何体的网格/表面。

作为一个例子......

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,它看起来很有希望,但我不确定如何使用它来解决这个问题。

1 个答案:

答案 0 :(得分:2)

如何确定点如何作为曲面连接在一起?距离?这可以是一种方式,alphashape3d包可能是有用的。否则,如果您确切知道它们是如何连接的,那么您可以使用rgl结构直接对其进行可视化。