Here is a brute-force way.
- Find the line segments from the plot
plot = ContourPlot[{(x) == (3 z^2 - 2), (x) == z^2}, {x, -3.5, 3.5}, {z, -1.5, 1.5},
MaxRecursion -> 2, RegionFunction -> Function[{x, y}, x <= 1]]
pts = Cases[plot, GraphicsComplex[ps__, __] :> ps, Infinity][[1]];
line = Cases[plot, Line[x_] :> x, Infinity];
lines = pts[[#]] & /@ line;
Graphics[{Red, Line[lines[[1]]], Blue, Line[lines[[2]]]}, Frame -> True, AspectRatio -> 1]
- Convert it to 3D points and rotate around any desired point or line
out = {#[[1]], 0.0, #[[2]]} & /@ lines[[1]];
in = {#[[1]], 0.0, #[[2]]} & /@ lines[[2]];
angle = Pi/2;
axis = {0, 0, 1};
point = {1, 0, 0};
out1 = Map[RotationTransform[angle, axis, point], out];
in1 = Map[RotationTransform[angle, axis, point], in];
Graphics3D[{Red, Line[out], Line[out1], Blue, Line[in], Line[in1]}]
- Rotate over $2\pi$ solid angle to get full surface
out2 = Flatten[Table[Map[RotationTransform[angle,axis,point],out],{angle,0, 2 Pi,0.5}],1];
in2 = Flatten[Table[Map[RotationTransform[angle,axis,point],in],{angle,0, 2 Pi,0.5}], 1];
- Use
ConvexHullMesh
reg1 = ConvexHullMesh[out2]
reg2 = ConvexHullMesh[in2]
You can use NIntegrate
over a region to get the volume (look at Volume under a List3dPlot?).
NIntegrate[1, {x, y, z} ∈ reg1] - NIntegrate[1, {x, y, z} ∈ reg1]
but for your system, you can integrate over the 2D region and multiply with $2\pi$ due to its symmetry.
reg[x_, y_] := (x) > (3 y^2 - 2) && (x) < y^2
RegionPlot[reg[x, y], {x, -3.5, 3.5}, {y, -1.5, 1.5}, MaxRecursion -> 5]
NIntegrate[Boole[reg[x, y]], {x, -3.5, 3.5}, {y, -1.5, 1.5}]
2.66667
RevolutionPlot3D
and you may find reading this question and its answers helps you. $\endgroup$