A flat three-dimensional surface that is not a function graph

I have a three-dimensional surface dataset that is not a function graph. Data is just a bunch of dots in 3D, and the only thing I could think of was to try scatter3 in Matlab. Surf will not work because the surface is not a function graph.

Using scatter3 yielded a not-so-perfect result, as there is no perspective / shadowing of any kind.

Any thoughts? It should not be Matlab, but it is my source source for building.

To get an idea of ​​the type of surface I have, consider four images: enter image description here

The first is a 3D contour plot, the second is a slice in the {z = 1.8} plane of the contour. My goal is to collect all the red areas. I have a way to do this for each piece of {z = k}. This is the third plot, and I like the fact that I see a lot here.

Iterating over z will give a surface that is a 4th plot that is a bit noisy (although I have ideas to reduce the noise ...). If I paint only a black surface using scatter3 without a path, all I get is a black indistinguishable blob, but for each slice a smooth curve is produced, and I noticed that the curves change quite smoothly when I adjust z.

Some fine tuning will give a much better 4th plot, but even if I get a 4th plot, so as not to make any noise at all, the result using scatter3 will be a black incomprehensible blob when plotting one, and not on top of a three-dimensional contour. I would like to get a beautiful picture of a full surface that is not built on top of a 3D contour image ****

**** Actually, just to compare and show how bad scatter3 for surfaces, even if you had exact points on the sphere and used scatter3 , the result would be a black blob and would not even look like a ball ****

Can POV-Ray handle this? I have never used it ...

+8
matlab plot povray
source share
3 answers

just wanted to trace this question. A quick way to do this in Matlab is as follows:

Consider a function d (x, y, z) defined as the minimum distance from (x, y, z) to your data set. Make sure d (x, y, z) is defined on some grid containing the dataset you are trying to build.

Then use isosurface to build (some) countour (s) d (x, y, z). For me, an outline of 0.1 from d (x, y, z) is enough: Matlab will build a beautiful surface of all points at a distance of 0.1 datasets with good lighting and all.

+1
source share

If you have a triangulation of your points, you might consider using the trisurf function. I used this before to create closed surfaces that have no boundaries (such as polyhedra and spheres). The downside is that you have to generate triangulation of your points. This may not be ideal for your needs, but it is definitely an option.

EDIT: As the @High Performance Mark pointer shows, you can try using delaunay to create triangulation in Matlab

+4
source share

In povray, the blob can be used to display a very dense collection of points if you make them the centers of the spheres.
http://www.povray.org/documentation/view/3.6.1/71/ If you want to make fragments of β€œspace” and color them according to your data, perhaps the object template (based on the #declared blob object) may do the trick.

Povray also has a way to work with df3 files that I have never worked with, but this user seems to have done something similar to your visualization. http://paulbourke.net/miscellaneous/df3/

0
source share

All Articles