A list of x,y coordinate pairs generates a ListLinePlot and Interpolation of the pair list creates a curve that can be rotated about the x-axis by RevolutionPlot3D. DiscretizeGraphics then generates what appears to be the correct meshed surface, but with a series of error messages about the values of PlotRange? I want the surface area of the resulting body, which is correctly given by Area, but Volume returns “Undefined”?
Hi Kevin,
Not sure why Volume does not work, perhaps because the discretization has some imperfections. You could just use calculus
Area of surface of revolution about the x axis
2 Pi NIntegrate[curve[x] Sqrt[1 + D[curve[x], x]^2], {x, 0, 108}]
(* 4048.33 *)
Volume
NIntegrate[Pi curve[x]^2, {x, 0, 108}]
(* 13122.5 *)
It is probably not defined because the resulting region is a surface rather than a filled body.
Yes, I’ve done the integral separately. Not a very informative error message. Thanks!
Is there a simple call to convert a surface to the enclosed solid?
Is there a simple call to convert a surface to the enclosed solid?
This relates to that discussion , and right after that I asked myself exactly the very same. I did not find a solution. As Sander pointed out, the region in question is not solid - and there are various ways to check that, e.g.:
reg = DiscretizeGraphics[hullForm];
Through[{RegionEmbeddingDimension, RegionDimension, SolidRegionQ}[reg]]
(** Out: {3,2,False} *)
One way to define this as a solid region is doing it implicitly:
regimpl =
DiscretizeRegion@ImplicitRegion[0 < x < 108 && y^2 + z^2 <= curve[x]^2, {x, y, z}];
Now you have:
Through[{RegionEmbeddingDimension, RegionDimension, SolidRegionQ}[regimpl]]
Volume[regimpl]
(* Out: {3,3,True} *)
(* Out: 13042.690 *)