繁体   English   中英

绘制不是函数图的 3D 曲面

[英]Plot 3D surface that is not the graph of a function

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

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

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

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

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

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

一些微调将提供更好的第 4 个图,但是,即使我让第 4 个图根本没有噪音,使用scatter3的结果将是单独绘制而不是在 3D 轮廓顶部时出现难以理解的黑色斑点. 我想获得未绘制在 3D 等高线图顶部的完整表面的精美图片

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

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

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

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

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

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

然后使用isosurface绘制 d(x, y, z) 的(一些)计数。 对我来说,绘制 d(x, y ,z) 的等高线 0.1 就足够了:Matlab 将绘制距离数据集 0.1 距离内的所有点的漂亮表面,并具有良好的照明和所有功能。

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

Povray 也有一种处理 df3 文件的方法,我从来没有用过,但是这个用户似乎做了一些类似于你的可视化的事情。 http://paulbourke.net/miscellaneous/df3/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM