MATH 392 -- Geometry Through History 

Geodesics on a surface of revolution 

April 20, 2016 

 

 

Here are some plots showing geodesics on the surface of revolution given by the following parametrization: 

 

x := proc (u, v) options operator, arrow; [u, `*`(`+`(`*`(`/`(1, 4), `*`(`^`(u, 2))), `/`(1, 4)), `*`(cos(v))), `*`(`+`(`*`(`/`(1, 4), `*`(`^`(u, 2))), `/`(1, 4)), `*`(sin(v)))] end proc; -1 

 

Note that the meridian curves are parabolas on this surface, but they are not parametrized by arc-length 

as in the general derivation we did in class.   Here is the set-up for the geodesic equations.  We begin by  

plotting the surface, then computing the Christoffel symbols   `^`(GAMMA[ij], k) 

 

with(plots); -1; RevSurf := plot3d(x(u, v), u = -7 .. 7, v = 0 .. `+`(`*`(2, `*`(Pi))), scaling = constrained); -1 

xu := diff(x(u, v), u); 1 

[1, `+`(`*`(`/`(1, 2), `*`(u, `*`(cos(v))))), `+`(`*`(`/`(1, 2), `*`(u, `*`(sin(v)))))] (1)
 

xv := diff(x(u, v), v); 1 

[0, `+`(`-`(`*`(`+`(`*`(`/`(1, 4), `*`(`^`(u, 2))), `/`(1, 4)), `*`(sin(v))))), `*`(`+`(`*`(`/`(1, 4), `*`(`^`(u, 2))), `/`(1, 4)), `*`(cos(v)))] (2)
 

N := simplify([`+`(`*`(xu[2], `*`(xv[3])), `-`(`*`(xu[3], `*`(xv[2])))), `+`(`-`(`*`(xu[1], `*`(xv[3]))), `*`(xu[3], `*`(xv[1]))), `+`(`*`(xu[1], `*`(xv[2])), `-`(`*`(xu[2], `*`(xv[1]))))]); 1; NN := ...
N := simplify([`+`(`*`(xu[2], `*`(xv[3])), `-`(`*`(xu[3], `*`(xv[2])))), `+`(`-`(`*`(xu[1], `*`(xv[3]))), `*`(xu[3], `*`(xv[1]))), `+`(`*`(xu[1], `*`(xv[2])), `-`(`*`(xu[2], `*`(xv[1]))))]); 1; NN := ...
N := simplify([`+`(`*`(xu[2], `*`(xv[3])), `-`(`*`(xu[3], `*`(xv[2])))), `+`(`-`(`*`(xu[1], `*`(xv[3]))), `*`(xu[3], `*`(xv[1]))), `+`(`*`(xu[1], `*`(xv[2])), `-`(`*`(xu[2], `*`(xv[1]))))]); 1; NN := ...
N := simplify([`+`(`*`(xu[2], `*`(xv[3])), `-`(`*`(xu[3], `*`(xv[2])))), `+`(`-`(`*`(xu[1], `*`(xv[3]))), `*`(xu[3], `*`(xv[1]))), `+`(`*`(xu[1], `*`(xv[2])), `-`(`*`(xu[2], `*`(xv[1]))))]); 1; NN := ...
N := simplify([`+`(`*`(xu[2], `*`(xv[3])), `-`(`*`(xu[3], `*`(xv[2])))), `+`(`-`(`*`(xu[1], `*`(xv[3]))), `*`(xu[3], `*`(xv[1]))), `+`(`*`(xu[1], `*`(xv[2])), `-`(`*`(xu[2], `*`(xv[1]))))]); 1; NN := ...
N := simplify([`+`(`*`(xu[2], `*`(xv[3])), `-`(`*`(xu[3], `*`(xv[2])))), `+`(`-`(`*`(xu[1], `*`(xv[3]))), `*`(xu[3], `*`(xv[1]))), `+`(`*`(xu[1], `*`(xv[2])), `-`(`*`(xu[2], `*`(xv[1]))))]); 1; NN := ...
 

 

 

[`+`(`*`(`/`(1, 8), `*`(u, `*`(`+`(`*`(`^`(u, 2)), 1))))), `+`(`-`(`*`(`/`(1, 4), `*`(`+`(`*`(`^`(u, 2)), 1), `*`(cos(v)))))), `+`(`-`(`*`(`/`(1, 4), `*`(`+`(`*`(`^`(u, 2)), 1), `*`(sin(v))))))]
`+`(`*`(`/`(1, 8), `*`(`^`(`*`(`^`(`+`(`*`(`^`(u, 2)), 1), 2), `*`(`+`(`*`(`^`(u, 2)), 4))), `/`(1, 2)))))
[`/`(`*`(u), `*`(`^`(`+`(`*`(`^`(u, 2)), 4), `/`(1, 2)))), `+`(`-`(`/`(`*`(2, `*`(cos(v))), `*`(`^`(`+`(`*`(`^`(u, 2)), 4), `/`(1, 2)))))), `+`(`-`(`/`(`*`(2, `*`(sin(v))), `*`(`^`(`+`(`*`(`^`(u, 2)),... (3)
 

xuu := diff(xu, u); 1; xuv := diff(xu, v); 1 

 

[0, `+`(`*`(`/`(1, 2), `*`(cos(v)))), `+`(`*`(`/`(1, 2), `*`(sin(v))))]
[0, `+`(`-`(`*`(`/`(1, 2), `*`(u, `*`(sin(v)))))), `+`(`*`(`/`(1, 2), `*`(u, `*`(cos(v)))))] (4)
 

xvv := diff(xv, v); 1 

[0, `+`(`-`(`*`(`+`(`*`(`/`(1, 4), `*`(`^`(u, 2))), `/`(1, 4)), `*`(cos(v))))), `+`(`-`(`*`(`+`(`*`(`/`(1, 4), `*`(`^`(u, 2))), `/`(1, 4)), `*`(sin(v)))))] (5)
 

e := simplify(add(`*`(xuu[i], `*`(UN[i])), i = 1 .. 3)); 1 

`+`(`-`(`/`(1, `*`(`^`(`+`(`*`(`^`(u, 2)), 4), `/`(1, 2)))))) (6)
 

f := simplify(add(`*`(xuv[i], `*`(UN[i])), i = 1 .. 3)); 1 

0 (7)
 

g := simplify(add(`*`(xvv[i], `*`(UN[i])), i = 1 .. 3)); 1 

`+`(`/`(`*`(`/`(1, 2), `*`(`+`(`*`(`^`(u, 2)), 1))), `*`(`^`(`+`(`*`(`^`(u, 2)), 4), `/`(1, 2))))) (8)
 

simplify([seq(`+`(`-`(`*`(e, `*`(UN[i]))), xuu[i]), i = 1 .. 3)]); 1 

[`/`(`*`(u), `*`(`+`(`*`(`^`(u, 2)), 4))), `/`(`*`(cos(v), `*`(`^`(u, 2))), `*`(`+`(`*`(2, `*`(`^`(u, 2))), 8))), `/`(`*`(sin(v), `*`(`^`(u, 2))), `*`(`+`(`*`(2, `*`(`^`(u, 2))), 8)))] (9)
 

Gamma111 := `/`(`*`(u(t)), `*`(`+`(`*`(`^`(u(t), 2)), 4))); 1 

`/`(`*`(u(t)), `*`(`+`(`*`(`^`(u(t), 2)), 4))) (10)
 

Gamma112 := 0; 1 

0 (11)
 

simplify([seq(`+`(`-`(`*`(f, `*`(UN[i]))), xuv[i]), i = 1 .. 3)]); 1 

[0, `+`(`-`(`*`(`/`(1, 2), `*`(u, `*`(sin(v)))))), `+`(`*`(`/`(1, 2), `*`(u, `*`(cos(v)))))] (12)
 

Gamma122 := `+`(`/`(`*`(2, `*`(u(t))), `*`(`+`(`*`(`^`(u(t), 2)), 1)))); 1 

`+`(`/`(`*`(2, `*`(u(t))), `*`(`+`(`*`(`^`(u(t), 2)), 1)))) (13)
 

Gamma121 := 0; 1 

0 (14)
 

simplify([seq(`+`(`-`(`*`(g, `*`(UN[i]))), xvv[i]), i = 1 .. 3)]); 1 

[`+`(`-`(`/`(`*`(`/`(1, 2), `*`(`+`(`*`(`^`(u, 2)), 1), `*`(u))), `*`(`+`(`*`(`^`(u, 2)), 4))))), `+`(`-`(`/`(`*`(`+`(`*`(`^`(u, 2)), 1), `*`(cos(v), `*`(`^`(u, 2)))), `*`(`+`(`*`(4, `*`(`^`(u, 2))), ... (15)
 

Gamma221 := `+`(`-`(`/`(`*`(`+`(`*`(`^`(u(t), 2)), 1), `*`(u(t))), `*`(`*`(2, `+`(`*`(`^`(u(t), 2)), 4)))))); 1 

`+`(`-`(`/`(`*`(`+`(`*`(`^`(u(t), 2)), 1), `*`(u(t))), `*`(`+`(`*`(2, `*`(`^`(u(t), 2))), 8))))) (16)
 

Gamma222 := 0; 1 

0 (17)
 

These are the differential equations for geodesics, entered in Maple format.  These will not have nice explicit solutions in  

elementary functions, so we will need to solve numerically, giving initial values for u, vand their first derivatives. 

This specifies the starting point of the geodesic and its tangent vector at the initial point.  The output 

of the dsolve command is a procedure that computes approximate values for These  

are then substituted into the surface parametrization to give points on the surface.  The curves are 

plotted as lists of points via the pointplot3d commands below: 

 

Geodesics := {`+`(diff(diff(u(t), t), t), `*`(Gamma111, `*`(`^`(diff(u(t), t), 2))), `*`(2, `*`(Gamma121, `*`(diff(u(t), t), `*`(diff(v(t), t))))), `*`(Gamma221, `*`(`^`(diff(v(t), t), 2)))), `+`(diff...
Geodesics := {`+`(diff(diff(u(t), t), t), `*`(Gamma111, `*`(`^`(diff(u(t), t), 2))), `*`(2, `*`(Gamma121, `*`(diff(u(t), t), `*`(diff(v(t), t))))), `*`(Gamma221, `*`(`^`(diff(v(t), t), 2)))), `+`(diff...
 

{`+`(diff(diff(v(t), t), t), `/`(`*`(4, `*`(u(t), `*`(diff(u(t), t), `*`(diff(v(t), t))))), `*`(`+`(`*`(`^`(u(t), 2)), 1)))), `+`(diff(diff(u(t), t), t), `/`(`*`(u(t), `*`(`^`(diff(u(t), t), 2))), `*`... (18)
 

soln1 := dsolve({op(Geodesics), u(0) = 0, v(0) = 0, (D(u))(0) = 1, (D(v))(0) = 0}, numeric, [u(t), v(t)], range = 0 .. 10); 1 

proc (x_rkf45) local _res, _dat, _vars, _solnproc, _xout, _ndsol, _pars, _n, _i; option `Copyright (c) 2000 by Waterloo Maple Inc. All rights reserved.`; if `<`(1, nargs) then error (19)
 

geo1 := [seq(x(subs(soln1(`+`(`*`(0.1e-1, `*`(i))))[2], u(t)), subs(soln1(`+`(`*`(0.1e-1, `*`(i))))[4], v(t))), i = 0 .. 1000)]; -1geop1 := pointplot3d(geo1, color = black); -1 

soln2 := dsolve({op(Geodesics), u(0) = 0, v(0) = 0, (D(u))(0) = `/`(1, 10), (D(v))(0) = `/`(1, 2)}, numeric, [u(t), v(t)], range = 0 .. 10); 1 

proc (x_rkf45) local _res, _dat, _vars, _solnproc, _xout, _ndsol, _pars, _n, _i; option `Copyright (c) 2000 by Waterloo Maple Inc. All rights reserved.`; if `<`(1, nargs) then error (20)
 

geo2 := [seq(x(subs(soln2(`+`(`*`(0.1e-1, `*`(i))))[2], u(t)), subs(soln2(`+`(`*`(0.1e-1, `*`(i))))[4], v(t))), i = 0 .. 4000)]; -1 

 

soln3 := dsolve({op(Geodesics), u(0) = 0, v(0) = 0, (D(u))(0) = -1, (D(v))(0) = 5}, numeric, [u(t), v(t)], range = 0 .. 10); 1 

proc (x_rkf45) local _res, _dat, _vars, _solnproc, _xout, _ndsol, _pars, _n, _i; option `Copyright (c) 2000 by Waterloo Maple Inc. All rights reserved.`; if `<`(1, nargs) then error (21)
 

geo3 := [seq(x(subs(soln3(`+`(`*`(0.1e-1, `*`(i))))[2], u(t)), subs(soln3(`+`(`*`(0.1e-1, `*`(i))))[4], v(t))), i = 0 .. 1000)]; -1 

 

geop2 := pointplot3d(geo2, color = red); -1; geop3 := pointplot3d(geo3, color = green); -1 

 

The surface and three different geodesics starting at the point plotted in black, red, and green: 

 

display(RevSurf, geop1, geop2, geop3); 1 

Plot_2d