Volume of a truncated concave solid (only surface mesh data is known)

47 Views Asked by At

I will start with an example.

This is the image of the mesh of a solid of revolution of a combination of a triangle and a parabola solid of revolution of a combination of a triangle and a parabola

It consists of only the surface mesh(quadrilaterals and triangles). I also know the average mesh size. In the above image, the height is 100 units and the average mesh size is 2 units. A plane cuts the solid into 2 parts. The plane can be oriented in any way but can only cut the solid into 2 parts (not necessarily equal).

What I need to compute is a large set of points on the cutting plane. I can then feed the points on the surface and points (nodes of the mesh) on the required side of the normal to the plane into alphaShape in MATLAB and get the volume.

The mesh is an approximation to the actual surface of the solid, I'm not interested in the exact value, just a very good approximation of the volume.

Here is my approach for convex bodies.

Project all points whose normal distances to the cutting plane are less than the average mesh size. Then considering only the points projected on the surface, find the boundary points using boundary function in MATLAB. Populate the region inside the boundary with more points.

I get within 80-95% of the actual value (when tested for known shapes) but there is room for improvement. For example, for a cone with a cutting plane halfway from its height and parallel to the base, It would be better if I can somehow take the average boundary of the points projected from the top and bottom of the plane for better results.

Is there a better way. Is there a more general way that I can also use for concave shapes and oblique cutting planes?

I think that if I can get the points on the edges of each element cut by the plane, then I can get a very good approximation but I don't know any way for doing that.

It would be very helpful if someone points me in the right direction.

What I can't do: I cannot change the mesh data.