【发布时间】:2012-06-05 23:32:38
【问题描述】:
我有以 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,它看起来很有希望,但我不确定如何使用它来解决这个问题。
【问题讨论】:
-
您当然可以在 rgl 中执行此操作(它提供了您需要的所有图形基元),它比您上面给出的任何一个示例(单个表面,凸包)。如果您发布示例数据,有人可能会试一试...
-
输入是点云吗?您能否提供一张示例图片以了解密度?
-
输入是一个点云 (x,y,z) 并且对于某些故障相对密集,对于其他故障则没有那么多。基本上,一些断层既有很好的特征(即地质是众所周知的),也有很好的参数化(许多定义的点)。其他故障没有很好地表征或参数化,有些介于两者之间。我的问题是试图创建一个我可以在 3D 中渲染的表面,看起来大约“正确”。这不是必须在科学上“正确”的东西,但不应该看起来明显错误(即断层表面自行闭合等)。
标签: r 3d geometry geometry-surface