# Gauss Map of a Hyperboloid of Two Sheets

I am currently working through the textbook Modern Differential Geometry of Curves and Surfaces with Mathematica. I am new to Mathematica and would like some help with this notebook file.

I was able to plot a hyperboloid of one sheet, and its Gauss map. However, my plot for the hyperboloid of two sheets only shows one sheet. What am I doing wrong?

(*Frequently, the image of the Gauss map of a surface has many \ self-intersections. Thus a variant of ParametricPlot3D which draws \ only the edges of the approximating polygons and not their interiors \ is frequently useful: *)

wireframe[surface_, {u_, u0_, u_ 1}, {v_, v0_, v1_}, opts___] :=
Module[{plottmp, grtmp},
plottmp = ParametricPlot3D[
surface // Evaluate, {u, u0, u1}, {v, v0, v1},
DisplayFunction -> Identity, opts];
grtmp = plottmp /. (Polygon[pts_] :>
Line[Append[pts, First [pts]]]);
Show[grtmp, DisplayFunction -> $DisplayFunction]]  (*The command wirefram uses ParametricPlot3D to computer the \ necessary information for the plot. But the option DisplayFunction \ [Rule] Identity suppresses the output. *) (*Next, Polygon[pts_][RuleDelayed] Line[Append[pts, First[pts]]] \ deletes the interior of each face. Then 'Show' with the option \ DisplayFunction[Rule]$DisplayFunction outputs the display. *)

(The text describes the Gauss map of several surfaces, using \ wireframe or ParametricPlot3D, whichever is more appropriate)

(GAUSS MAP OF HYPERBOLOID OF ONE SHEET)

hyperboloid[a_, b_, c_][u_, v_] := {a Cosh[v] Cos[u],
b Cosh[v] Sin[u], c Sinh[v]}


(*Plot the image under the Gauss map of the equatorial region: {hyperboloid1,1,1| 0 \leq u \leq 2Pi, -1 \leq v \leq 1 } *)

ParametricPlot3D[hyperboloid[1, 1, 1][u, v],
{u, 0 , 2 Pi}, {v, -1, 1}, Axes -> None,
Boxed -> False,ViewPoint -> {1.0, -1.8, 2.7}]

unitnormal[x_][u_, v_] := Module[{xu, xv, N1},
xu = D[x[uu, vv], uu];
xv = D[x[uu, vv], vv];
N1 = cross[xu, xv];
Simplify[N1.N1]^(-1/2) N1] /. {uu -> u, vv -> v}
wireframe[unitnormal[hyperboloid[1, 1, 1]][u, v],
{u, 0, 2 Pi}, {v, -1, 1}, Axes -> None, Boxed -> False,
ViewPoint -> {1.0, -1.8, 2.7}]


(above: Gauss map of equatorial region of hyperboloid of one sheet: \ x^2 + y^2-z^2=1)

(THE GAUSS MAP OF A HYPERBOLOID OF TWO SHEETS)

 hy2sheet[a_, b_, c_][u_, v_] :=
{a Cosh[u] Cosh[v], b Sinh[u] Cosh[v], c Sinh[v]}
ParametricPlot3D[hy2sheet[1, 1, 1][u, v], {u, -1 , 1}, {v, -1, 1},
Axes -> None, Boxed -> False,
ViewPoint -> {1.0, -10, 10}]


(Plot image under the Gauss map of the region {hy2sheet1,1,1| \ -1 \leq u,v \leq 1})

 wireframe[
{{-0.4, 0, 0} + unitnormal [hy2sheet[1, 1, 1]][u, v],
{0.4, 0, 0} - unitnormal[hy2sheet[-1, 1, 1]][u, v]} // Evaluate,
{u, -1, 1}, {v, -1 - 1}, Axes -> None, Boxed -> False,
ViewPoint -> {0.4, -3.0, 1.2}]


I'll talk about the math first, and then about coding in Mathematica.

First, recall that $\cosh v > 0$ if $v\in\mathbb R$; this is why you are seeing only one sheet of your two-sheet hyperboloid. To use a two-dimensional analogy:

ParametricPlot[{Cosh[x], Sinh[x]}, {x, -3, 3}]


will only show one branch of the hyperbola, as opposed to both branches. If you want to see both:

ParametricPlot[Table[{pm Cosh[x], Sinh[x]}, {pm, {-1, 1}}], {x, -3, 3}]


(I deliberately did not post the pictures for these; you'll need to evaluate them yourself.)

To carry this over to 3D:

With[{a = 1, b = 1, c = 1},
ParametricPlot3D[Table[{pm a Cosh[u] Cosh[v], b Sinh[u] Cosh[v], c Sinh[v]},
{pm, {-1, 1}}], {u, -2, 2}, {v, -2, 2}]]


In the meantime, let me just say that I'm not fond of Gray's chosen parametrization for the two-sheet hyperboloid, so I'll use my own instead:

With[{a = 1, b = 1, c = 1},
ParametricPlot3D[Table[{pm a Cosh[u], b Sinh[u] Cos[v], c Sinh[u] Sin[v]},
{pm, {-1, 1}}], {u, -2, 2}, {v, 0, 2 π}]]


The implementation of wireframe[] that you gave was intended for use with old versions of Mathematica; in particular, the switching between DisplayFunction -> Identity and DisplayFunction -> \$DisplayFunction was at the time a necessary annoyance. Additionally, surfaces at that time couldn't be made translucent, so one had to resort to making wireframe surfaces.

Let's derive an expression for the unit normal of the parametrization I prefer:

Clear[a, b, c, u, v];
hypnormal[a_, b_, c_][u_, v_] = Simplify[#/PowerExpand[Sqrt[Factor[#.#]]] &[
Cross @@ Transpose[D[{a Cosh[u], b Sinh[u] Cos[v], c Sinh[u] Sin[v]}, {{u, v}}]]]];


To display the Gauss map:

ParametricPlot3D[{{-0.4, 0, 0} + hypnormal[1, 1, 1][u, v],
{0.4, 0, 0} - hypnormal[-1, 1, 1][u, v]} // Evaluate,
{u, -1, 1}, {v, 0, 2 π}, Axes -> None, Boxed -> False,
ViewPoint -> {0.4, -3.0, 1.2}]


Instead of building a wireframe, one can just set PlotStyle appropriately:

ParametricPlot3D[{{-0.4, 0, 0} + hypnormal[1, 1, 1][u, v],
{0.4, 0, 0} - hypnormal[-1, 1, 1][u, v]} // Evaluate,
{u, -1, 1}, {v, 0, 2 π}, Axes -> None, Boxed -> False,
ViewPoint -> {0.4, -3.0, 1.2}, PlotStyle -> Opacity[2/3]]


but if you insist on seeing a wireframe, then you can use PlotStyle for that too (and set BoundaryStyle as well):

ParametricPlot3D[{{-0.4, 0, 0} + hypnormal[1, 1, 1][u, v],
{0.4, 0, 0} - hypnormal[-1, 1, 1][u, v]} // Evaluate,
{u, -1, 1}, {v, 0, 2 π}, Axes -> None, Boxed -> False,
ViewPoint -> {0.4, -3.0, 1.2},
BoundaryStyle -> Automatic, PlotStyle -> None]


(If you want to use Gray's original parametrization instead, just change the parametric equations in my definition of hypnormal.)

• Thanks for a thorough response. I purchased an older edition of Gray's textbook since it was cheaper... didn't even think about old code. – mathladyAmy Mar 21 '18 at 16:50