绘制非函数图形的三维曲面

8
我有一个三维数据集,表示的是不是函数图形的表面。这些数据只是一堆三维点,我能想到的唯一方法就是尝试在Matlab中使用scatter3。由于表面不是函数图形,所以surf无法使用。
使用scatter3效果不太理想,因为没有透视或任何阴影效果。
你有什么想法吗?它不必非得用Matlab,但那是我绘制图形的首选工具。
为了了解我拥有的表面类型,请考虑下面四幅图像: enter image description here 第一幅图是三维等高线图,第二幅图是等高线在平面上的切片{z=1.8}。我的目标是捕捉所有红色区域。我有一种方法可以对每个切片{z=k}执行此操作。这是第三张图,我非常喜欢这里看到的东西。
通过对z进行迭代,将得到一个表面,这是第四张图,它有点嘈杂(尽管我有减少噪声的想法...)。如果我仅使用scatter3绘制黑色表面而不使用等高线,则会得到一个黑色的无法区分的斑点,但对于每个切片,我都会得到一个平滑的曲线,并且我已经注意到当我调整z时曲线变化非常平滑。
一些微调将给出一个更好的第四张图,但是即使我让第四张图没有任何噪声,使用scatter3单独绘制的结果仍然是一个黑色的无法理解的斑点,而不是在三维等高线图上方绘制的表面。我想获得一个没有绘制在三维等高线图上方的完整表面的漂亮图片。
实际上,为了比较并展示scatter3在表面上的效果有多差,即使你有球面上的精确点并使用scatter3,结果也会是一个黑色的斑点,甚至看起来都不像一个球体。
POV-Ray能处理这个吗?我从未使用过它...

你能展示scatter3的结果吗?这样我们就知道我们正在讨论什么类型的数据了... - Gunther Struyf
@GuntherStruyf,我现在做不到...我正在生成数据并实时绘图,程序仍在运行中...当然,PrintScrn在我所用的电脑上无法使用,因此我无法发送当前进度的截图...我希望大约一个小时左右可以添加它。 - db1234
我添加了一张图示描述。 - db1234
3个回答

4
如果您有点的三角测量,您可以考虑使用trisurf函数。我以前用过它来生成没有边界的封闭表面(如多面体和球体)。缺点是您必须生成点的三角测量。这可能不符合您的需求,但绝对是一种选择。
编辑:正如@High Performance Mark建议的那样,您可以尝试在Matlab中使用delaunay来生成三角测量。

而且,正如你没有说的那样,Matlab具有3D三角测量的功能。 - High Performance Mark
@HighPerformanceMark 是的,我目前没有访问Matlab的权限,并且想要等到我能够确定三角剖分函数的名称之后再将它们发布在答案中。我从记忆中唯一记得的一个是delaunay。 - mathematician1975
1
从文档中可以看出,delaunay 可能是 OP 需要的唯一函数,肯定是一个不错的起点。 - High Performance Mark
在(x,y)域中使用Delaunay(然后使用trisurf)无法解决问题,如果点不代表单值函数。 3D域的delaunayn也无法解决问题,除非该集合表示凸对象,在这种情况下,convhulln是适当的,因为只需要表面。由于提问者从未提到点云的凸性作为属性,因此我不会将其视为事实。 - user85109
@mathematician1975 - alpha形状有时可以在这里使用。Alpha形状产生类似于Delaunay三角剖分的东西,但不一定是凸的。该形状的边界表面或外壳被称为alpha壳。如果散布集以相当均匀的密度填充整个表面,则alpha形状可以工作,只要没有尖锐的内部角落可寻。也许比alpha形状更一致地适用于此目的的是CRUST算法。 - user85109
显示剩余4条评论

1

我只是想跟进这个问题。在Matlab中快速简便的方法如下:

考虑函数d(x, y, z),它被定义为从点(x, y, z)到数据集的最小距离。确保d(x, y, z)在包含你要绘制的数据集的某个网格上被定义。

然后使用isosurface来绘制d(x, y, z)的一个或多个轮廓。对我而言,绘制d(x, y, z)的轮廓0.1就足够了:Matlab将绘制所有距离数据集0.1以内的点的漂亮表面,并具有良好的光照效果。


0
在povray中,blob对象可以用于显示非常密集的点集,如果你把它们作为球体的中心点。
如果您想要能够切割“空间”,并根据您的数据对它们进行着色,那么基于#声明的blob对象的对象模式可能会派上用场。 http://www.povray.org/documentation/view/3.6.1/71/ Povray还有一种处理df3文件的方法,我从未使用过,但这位用户似乎已经做了类似于你的可视化工作。 http://paulbourke.net/miscellaneous/df3/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接