This_could be done with Region
functions. Note that while convenient, they are usually not very fast. But FWIW:
a = Sqrt[2];
b = 1;
{zmin, zmax} = {0, 8};
Rotation of the ellipse so that it makes a 90 degree while going from z = 0
to z = 8
:
m[z_] = (RotationMatrix[Pi/2 z/zmax].{x, y}/{a, b}).(RotationMatrix[Pi/2 z/zmax].{x, y}/{a, b}) <= 1

A region:
reg = ImplicitRegion[m[z] && zmin < z < zmax && -2 < x < 2 && -2 < y < 2, {x, y, z}];
To view the cross sections at height z
:
tab = Table[
RegionPlot[m[z], {x, -2, 2}, {y, -2, 2},
PlotLabel -> "z = " <> ToString[z]], {z, zmin, zmax, 0.5}];
ListAnimate[tab]
Export["plot.gif", tab, "DisplayDurations" -> 0.5]

Drawing the region (slow):
RegionPlot3D[reg, PlotPoints -> 100, BoxRatios -> {a, a, 8}, Axes -> True]

Volume[reg]
runs for several minutes without an answer (see also this thread). However, discretizing the region is much faster:
DiscretizeRegion[reg]

and its numerical volume
Volume @ DiscretizeRegion[reg]
35.3772
Volume @ DiscretizeRegion[reg, MaxCellMeasure -> 0.0001]
gives a more accurate volume equal to 35.5378
; decreasing MaxCellMeasure
improves the volume but at the cost of a longer computation. Note that the exact volume is 8 Sqrt[2] Pi
, which is approximately 35.5431
, so the agreement is quite satisfying. Unfortunately, RootApproximant[v/Pi, 2]
fails to recognize the correct volume for any v
obtained above (see also this answer and the thread linked there).
Compare to the approximation obtained by J. M. (whose answer is less accurate, but faster; so it depends what's the expectation put on) with ParametricRegion
:
4/3 (3 + 4 Sqrt[2]) Pi // N
36.2617