More on Quadrics

This notebook illustrates the concept of volume limited by various quadrics. The ellipsoid has a closed shape and its volume is finite. The other quadrics extend to infinity and the surface of the quadric alone is no longer sufficient to define a finite volume. An intuitive approach consists, in general, of viewing a quadric as a surface of revolution of axis Δ. This would be exact if the section of the quadric by a plane perpendicular to Δ were a circle. In fact, for a general quadric, the section is an ellipse. There is, however, an exception to that approach because the hyperbolic paraboloid has no elliptical section but the axis Δ still exists. The volume is then limited by the quadric and two planes perpendicular to Δ. The direct access to the volume form of a quadric is provided by the canonical form, the simplest representation of a quadric obtained when the reference frame coincides with the axes of symmetry of the quadric.  Since a volume cannot be represented, it is suggested by a sequence of surfaces that fill it, hence the term Russian dolls, which are objects boxed into one another. Important also in this notebook is the manipulation of the parameters and their range of variations within the contexts of surfaces or volumes.

<< Geometrica`Geometrica05`

Ellipsoid

The default ellipsoid used in the example is not of revolution. All the ellipsoids are scaled from their common center. The third variable, #3, can be seen as a radius since it multiplies all the coordinates.

cf = CanonicalForm@CEllipsoid[]

Because surfaces have to be drawn, the variable #3 has to be fixed and its range of variations suppressed from the canonical form. The rule ru performs this task by deleting the list c. Three surfaces are selected by imposing the values 1, 0.5, 0.25 to #3.

a =. ; b =. ;
ru = (PRange -> {a_, b_, c_, 
                d_}) -> PRange -> {a, b, 
              d};
e = cf /. ru
{e1, e2, e3} = {e /. #3 -> 1, e /. #3 ->  .5, 
          e /. #3 ->  .25};
Draw3D[Red, e1, Green, e2, Blue, e3];

To see the interior of a volume, one technique consists of reducing the range of parameters. In this example, the first variable is limited to (0, π) and the objects are painted.

ru = (PRange -> {a_, b_, c_, 
                d_}) -> PRange -> {{0, Pi}, b, 
              d};
e = cf /. ru;
{e1, e2, e3} = {e /. #3 -> 1, e /. #3 ->  .5, 
          e /. #3 ->  .25};
Draw3D[Paint[{e1, e2, e3}, {Red, Green, Blue}]];

Default painting can also be used.

Draw3D@Paint[{e1, e2, e3}];

The volume of the full ellipsoid can be calculated. One notices that it is equal to (4/3)πabc when the equation of the ellipsoid is written like the following.

((x^2)/(a^2)) + ((y^2)/(b^2)) + ((z^2)/(c^2)) =  1

Volume@CEllipsoid[]

Hyperboloids

The procedure applied to the ellipsoid can be repeated for the hyperboloids.

Hyperboloid of One Sheet

The first variable defines the position of a generator, the second variable a point on the generator, and the third one is a radius of the ellipse intersection of the hyperboloid with a plane perpendicular to the vertical axis of symmetry.

h0 = HyperboloidOfOneSheet[];
cf = CanonicalForm@h0;
h = 
      cf /. (PRange -> {a_, b_, c_, 
                d_}) -> PRange -> {a, b, 
              d}
{h1, h2, h3} = {h /. #3 -> 1, h /. #3 ->  .5, 
          h /. #3 ->  .25};
Draw3D[Red, h1, Green, h2, Blue, h3];

The interior of the volume is shown using the canonical viewpoint.

ru = (PRange -> {a_, b_, c_, 
                d_}) -> PRange -> {{0, Pi}, b, 
              d};
h = cf /. ru;
{h1, h2, h3} = {h /. #3 -> 1, h /. #3 ->  .5, 
          h /. #3 ->  .25};
vp = CanonicalViewPoint[h0];
Draw3D[Paint[{h1, h2, h3}, {Red, Green, Blue}], 
        ViewPoint -> vp];

The same figure can be drawn using the default color of Paint.

Draw3D[Paint[{h1, h2, h3}], ViewPoint -> vp];

The entire volume can be calculated analytically.

Volume@h0

Hyperboloid of Two Sheets

The parametric form of a hyperboloid of two sheets specifies the range of the first parameter in such a way that the two sheets can be represented together.

h0 = HyperboloidOfTwoSheets[];
QuadricPoint /. (QuadricElements @@ h0)
Draw3D@Paint[h0];

For the treatment of volumes, only the upper sheet is considered. A hyperboloid of two sheets is not a ruled surface, and the generators of the hyperboloid of one sheet are replaced by hyperbolae. The first variable defines the position of a hyperbola, the second variable a point on the hyperbola and the third one is a radius of the ellipse intersection of the hyperboloid with a plane perpendicular to the x-axis of symmetry.

cf = CanonicalForm@h0
ru = (PRange -> {a_, b_, c_, 
                d_}) -> PRange -> {a, b, 
              d};
h = cf /. ru
{h1, h2, h3} = {h /. #3 -> 1, h /. #3 ->  .5, 
          h /. #3 ->  .25};
Draw3D@Paint[{h1, h2, h3}];

The volume can be calculated analytically.

Volume@h0

Paraboloids

The paraboloids may be either elliptic or hyperbolic.

Elliptic Paraboloid

The first variable defines the position of a parabola, the second variable a point on the parabola, and the third variable a radius of the ellipse of cross section.

p0 = EllipticParaboloid[];
cf = CanonicalForm@p0;
p = 
      cf /. (PRange -> {a_, b_, c_, 
                d_}) -> PRange -> {a, b, 
              d}
{p1, p2, p3} = {p /. #3 -> 1, p /. #3 ->  .5, 
          p /. #3 ->  .25};
Draw3D@Paint[{p1, p2, p3}];

The entire volume can be calculated analytically.

Volume@p0

Hyperbolic Paraboloid

The hyperbolic paraboloid is a curious surface generated by a system of two lines. It looks like a mountain pass. The first variable determines the position of a generator, the second variable the position of a point on that generator, and the third variable scales the x and y coordinates. The canonical form limits the parameter range to a quarter of the surface, so that the calculation of the volume gives a finite result. The following code shows the full surface as the assembly of four patches corresponding to four parameter ranges.

p0 = HyperbolicParaboloid[];
cf = CanonicalForm@p0
ru1 = (PRange -> {a_, b_, c_, 
                d_}) -> PRange -> {a, b, d};
ru2 = (PRange -> {a_, b_, c_, 
                d_}) -> PRange -> {{-Pi, 0}, {0, Pi}, 
              d};
ru3 = (PRange -> {a_, b_, c_, 
                d_}) -> PRange -> {{0, Pi}, {-Pi, 0}, 
              d};
ru4 = (PRange -> {a_, b_, c_, 
                d_}) -> PRange -> {{-Pi, 0}, {-Pi, 0}, 
              d};
pa = cf /. # & /@ {ru1, ru2, ru3, ru4};
ph = pa /. #3 -> 1
vp = CanonicalViewPoint[p0];
Draw3D[Paint[ph, {Blue, Green, Magenta, Yellow}], 
        ViewPoint -> vp];

The Russian dolls are then constructed.

ru = (PRange -> {a_, b_, c_, 
                d_}) -> PRange -> {a, b, d};
pa = cf /. ru;
ph = {pa /. #3 -> 1, pa /. #3 ->  .5, 
          pa /. #3 ->  .25};
Draw3D[Paint[ph, {Red, Green, Blue}], 
        ViewPoint -> vp];

Finally, the volume is calculated.

Volume[p0]

Quadric Cone

A quadric cone can be considered as the limit of a hyperboloid of two sheets when the two vertices of the hyperboloid touch. The hyperbolae then become straight lines. To get a nonuniform painting function for the default color function, one has to improve the resolution by increasing the number of points on the generators, say by using say 25 points instead of 2.

co0 = QuadricCone[];
cf = CanonicalForm@co0
co = 
        cf /. (PRange -> {a_, b_, c_, 
                  d_}) -> PRange -> {a, 
                b, {25, 25}};
col = {co /. #3 -> 1, co /. #3 ->  .5, 
          co /. #3 ->  .25};
vp = CanonicalViewPoint[co0];
Draw3D[Paint[col], ViewPoint -> vp];

The volume of the cone is the same as the volume of a pyramid: one-third of the product of the base and the distance from the vertex to the base.

Volume@co0

Quadric Cylinders

The cylinder is a cone whose vertex is at infinity. There are three different types corresponding to the shape of the base: elliptic, hyperbolic, and parabolic. The first variable determines the position of the generator and the second one the position of a point on the generator. The third variable depends on the base type. The volume of a cylinder is the same as the volume of a prismoid. It is the product of the base and the distance between the two parallel extreme planes.

Elliptic Cylinder

The parametrization is the same as for the cone.

cy0 = EllipticCylinder[];
cf = CanonicalForm@cy0;
cy = 
      cf /. (PRange -> {a_, b_, c_, 
                d_}) -> PRange -> {a, 
              b, {25, 25}}
{cy1, cy2, cy3} = {cy /. #3 -> 1, cy /. #3 ->  .5, 
          cy /. #3 ->  .25};
Draw3D@Paint[{cy1, cy2, cy3}];

Here is the volume of the cylinder.

Volume@cy0

Parabolic Cylinder

There is one difference with the parametrization of the elliptic cylinder: the third variable scales the abscissa. The paraboloids look like the pages of a book, and it is not necessary to modify the range of the first parameter. The range of the second parameter is extended to better distinguish the three sheets.

cy0 = ParabolicCylinder[];
cf = CanonicalForm@cy0
cy = 
        cf /. (PRange -> {a_, b_, c_, 
                  d_}) -> PRange -> {a, {0, 5}, {25, 
                  25}};
cyl = {cy /. #3 -> 1, cy /. #3 ->  .5, 
          cy /. #3 ->  .25};
vp = ViewPoint[cy0];
Draw3D[Paint[cyl]];

Here is the volume of the parabolic cylinder with the range (0, 1) for the second parameter.

Volume@cy0

Hyperbolic Cylinder

As for the hyperboloid of two sheets, the canonical form of the hyperbolic cylinder retains only one sheet. The third variable scales the z-coordinate.

cy0 = HyperbolicCylinder[];
cf = CanonicalForm@cy0
cy = 
        cf /. (PRange -> {a_, b_, c_, 
                  d_}) -> PRange -> {a, {0, 3}, {25, 
                  25}};
{cy1, cy2, cy3} = {cy /. #3 -> 1, cy /. #3 ->  .5, 
          cy /. #3 ->  .25};
g1 = Draw3D@Paint[{cy1, cy2, cy3}];

Here is the volume of the hyperbolic cylinder with the range (0, 1) for the second parameter.

Volume@cy0