8

我有一个不是函数图的表面的 3D 数据集。数据只是 3D 中的一堆点,我唯一能想到的就是scatter3在 Matlab 中尝试。Surf将不起作用,因为表面不是函数图。

scatter3由于没有任何类型的透视/阴影,因此使用给出了不太理想的结果。

有什么想法吗?它不一定是 Matlab,但这是我绘图的首选来源。

要了解我所拥有的表面类型,请考虑以下四个图像: 在此处输入图像描述

第一个是 3D 等高线图,第二个是等高线平面 {z = 1.8} 中的切片。我的目标是拾取所有红色区域。我有一种方法可以对每个切片 {z = k} 执行此操作。这是第三个情节,我非常喜欢我在这里看到的。

对 z 进行迭代将给出一个表面,这是第 4 个图,它有点嘈杂(尽管我有减少噪音的想法......)。如果我只使用没有轮廓的 scatter3 绘制黑色表面,我得到的只是一个无法区分的黑色斑点,但是对于每个切片,我都会得到一条平滑的曲线,并且我注意到当我调整 z 时曲线变化非常平滑。

一些微调将给出更好的第 4 个图,但是,即使我让第 4 个图完全没有噪音,scatter3当单独绘制而不是在 3D 轮廓顶部时,使用的结果将是一个黑色的难以理解的斑点。我想得到一张没有绘制在 3D 等高线图顶部的完整表面的漂亮图片

事实上,只是为了比较和显示scatter3表面的糟糕程度,即使你在球体上有精确的点并使用scatter3结果将是一个黑色的斑点,甚至看起来不像一个球体

POV-Ray 可以处理这个吗?我从来没用过...

4

3 回答 3

4

如果您对点进行三角测量,则可以考虑使用该trisurf功能。我以前用它来生成没有边界的封闭曲面(例如多面体和球体)。缺点是您必须生成点的三角剖分。这可能不适合您的需求,但绝对是一种选择。

编辑:正如@High Performance Mark 建议的那样,您可以尝试使用delaunay在 Matlab 中生成三角剖分

于 2012-08-21T09:07:54.643 回答
1

只是想跟进这个问题。在 Matlab 中执行此操作的一种快速好方法如下:

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

然后用于isosurface绘制 d(x, y, z) 的(一些)countour(s)。对我来说,绘制 d(x, y ,z) 的轮廓 0.1 就足够了:Matlab 将在数据集的 0.1 距离内绘制一个漂亮的表面,所有点都具有良好的照明等。

于 2012-10-09T09:04:46.700 回答
0

在 povray 中,如果将 blob 对象设为球体中心,则可以使用 blob 对象来显示非常密集的点集合。
http://www.povray.org/documentation/view/3.6.1/71/ 如果您希望能够制作“空间”切片并根据您的数据对它们进行着色,那么可能是对象模式(基于#declared blob 对象)可能会解决问题。

Povray 还有一种方法可以处理我从未使用过的 df3 文件,但这个用户似乎做了与您的可视化类似的事情。 http://paulbourke.net/miscellaneous/df3/

于 2012-09-25T13:17:55.520 回答