绘制不是函数图形的3D表面

db1*_*234 8 matlab plot povray

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

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

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

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

第一个是3D等高线图,第二个是轮廓的平面{z = 1.8}中的切片.我的目标是拿起所有的红色区域.我有一个方法为每个切片执行此操作{z = k}.这是第三个情节,我喜欢我在这里看到的很多东西.

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

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

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

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

db1*_*234 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 内的所有点的漂亮表面,并且具有良好的照明等。