4
$\begingroup$

I would like to show the surface which passes through a list of points. I already have the shape using the ListPointPlot3D (Fig.1). However, I would like to show the surface which includes all the points and then find the associated surface area. I tried different commands such as ListSurfacePlot3d but it just represents part of the shape (Fig. 2). Also, I would like to know how I can find the surface area value of the generated surface. I tried ListPlot3D command but it gives me a wrong answer (Fig.3). Below is the link to the data.

https://pastebin.com/BEDj33X3

Any help is really appreciated.

Thank you and regards,

Fig. 1 Fig. 2 Fig. 3

$\endgroup$
3
  • $\begingroup$ Thank you for the response. No, I tried that command, but it did not provide me the correct answer. I attached the obtained fig to the question. $\endgroup$ Jun 1, 2020 at 18:05
  • $\begingroup$ Thank you for the response. No problem! How can I share the data with you? $\endgroup$ Jun 1, 2020 at 19:13
  • $\begingroup$ Thank you! I added the link to my data in the question box. $\endgroup$ Jun 1, 2020 at 19:40

1 Answer 1

6
$\begingroup$

Calculating a convex hull mesh is somewhat well-defined. Calculating a volume or surface of a shape with concavity is more complicated and requires you to tune the algorithm to get what you want. Thus, there are built-in algorithms for convex shapes, but I don't know of any built-in algorithm for non-convex shapes. Fortunately, Jon McLoone has uploaded a nice algorithm to the Wolfram Function Repository so we don't have to build our own.

data = (* your posted data here *);
f = ResourceFunction["NonConvexHullMesh"];
mesh = f[data, 5];
MeshRegion[mesh, PlotTheme -> "Scientific"]

Nonconvex hull mesh of posted data.

The output of the function is a MeshRegion, but it seems I can change the PlotTheme by calling MeshRegion on the output. You could of course just use f[data, 5] to get the default output and not mess around with MeshRegion.

As I mentioned, these shapes can require some tuning, so you may have to play around with the "sensitivity" parameter in order to get exactly what you want, but a sensitivity of 5 looks pretty good to me.

EDIT:

Apparently I don't read well. I missed where you asked for the surface area. However, that should be easy enough:

Area[mesh]

64717.1

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.