Loxodromes

by

Rolf Sulanke

Finished October  26, 2009.
Revised  October 7, 2011; August 3, 2012.
Revised January 7, 2019.

Mathematica 11.3.

Summary

The aim of this notebook is to show that the loxodromes besides of the circles are the curves of constant conformal curvature in the Möbius plane. We calculate the conformal natural parameter of a plane curve and the moving Frenet Frame of the loxodromes. The relation between Euclidean and Möbius invariants are deduced. On the way we define and apply basic concepts of Euclidean differential geometry of plane curves. The notebook originated as a first attempt to calculate conformal invariants of curves with Mathematica. Some Modules and functions defined here ad hoc are contained  in a may be changed  form in later created Mathematica packages.

Copyright

This notebook and the accompanying packages are  public. Authors who intend to publish a changed or completed version of them should do it under their own names with the condition that they cite the original notebook with the internet address or other source where they got it. I am not responsible for errors or damages originated by the use of the procedures contained in my notebooks or packages; everybody who applies them should test carefully whether they are appropriate for his purposes.

Keywords

Plane Curves, spherical curves, arclength, curvature, conformal curvature, natural conformal parameter, spirals, loxodromes

Initialization

The needed packages

For working with the notebook you need the packages
vectorcalc.m, euvec.m, neuvec.m.
Before initializing the notebook ensure that these packages are laying in your working directory .

You may download these and other packages  here: moebpack.zip.  Insert the path of your package directory into the  appropriate of the next two cells and make it an initialization cell, e.g.

For Windows:

SetDirectory["H:\\mymath\\diffgeo\\mdg"];

For Linux:

SetDirectory["~/mymath/diffgeo/mdg"];

Now give the cell corresponding to your  operating system the properties "Cell Evaluatable" and "Initialization cell" (Menu Cell/Cell properties), and inactivate these properties for the  cells corresponding to the other operating system. If this is done, save the notebook. Next time you may start the notebook directly with the evaluation of the initialization, as follows:

Initialization

Before starting to work interactively with the notebook, first do the following two steps:

1. Activite Evaluation/Evaluate Initialization from the menu.

Needs["neuvec`"]

Loading neuvec.m implies the loading of euvec.m and vectorcalc.m.
WARNING. Do not load other packages for use in this notebook; this could cause symbol mismatch!

2. Set the dimension:

In this notebook we shall  consider mainly the two-dimensional sphere as a quadric in the 3-dimensional  projective space. The dimension dim of the vector space equals the dimension of the projective space +1,  therefore  the next cells are evaluated during the initialization:

dim::usage="dim is the dimension of the vector space under consideration; it must be set within the Global Context.";

dim = 4;

In what follows we apply concepts of Möbius geometry, modelled in a pseudo-Euclidean vector space of index 1. We set the index

ind::usage = "ind is the index of the pseudo-Euclidean vector space under consideration; it must be set within the Global Context.";

ind = 1;

?vec

vec[x]

pssp[vec[x],vec[x]]

Remark 
The global constants dim, ind appears in many functions as default argument of the dimension and the index; without fixing it as a positive integer many error messages will be created, and they will not work. The order in which the two steps of the initialization are carried out is deciding: In case you fixed the dimension dim and index ind already before evaluating the initialization cells, it will be fixed for all the concepts as the default value of this variable.  Fixing it after the Initialization makes it possible to change the value of dim any time, if wanted.

1.  List of Symbols and their Usages

1.1.  Symbols in the Package vectorcalc.m

?vectorcalc`*

To get the usages click on the name! If this does not work,enable Dynamic Updating in the Evaluation Menu.
 Example: Click vec, or ask

?vec

For the full definition ask

??vec

The function vec is  nothing as Array with a predefined dimension, wgich may be changed, if wanted. Smilarly is matrix

??matrix

1.2. Symbols in the Package euvec.m

?"euvec`*"

cross is similar to the built-in function

?Cross

esorthonorm (Erhard Schmidt orthogonalization) is similar to the bulit-in procedure

?Orthogonalize

Options[Orthogonalize]

Options[esorthonorm]

The function sphere should not be mixed up with the built-in object

?Sphere

1.3. Symbols in the Package neuvec.m

The package contains some basic functions of pseudo-orthogonal linear algebra. It is completed in the package moeb.m.

?"neuvec`*"

psgram[]//MatrixForm

pssp[vec[x],vec[x]]

1.4.  Symbols in the Global Context

?Global`*

Simplify[pssp[vec[x],vec[x]] == iosp[transio[].vec[x],transio[].vec[x]]]

2. The Loxodromes

2.1. Logarithmic Spirals as Orbits of  1-parameter Groups of Conformal Transformations

We define a 1-parameter group of conformal transformations of the Euclidean plane:

spir::usage ="spir[t,a:1] is the parameter representation of the spiral tansformation group with parameter a in the Euclidean plane.";

$Assumptions = a∈ Reals&& t∈ Reals&& s∈Reals;

?spir

spir[t_,a_:1]:={{Cos[t],-Sin[t]},{Sin[t],Cos[t]}}*Exp[a*t]

spir[t]//MatrixForm

Simplify[spir[s,a].spir[t,a]] == spir[s+t,a]

A parameter representation of a general logarithmic spiral as the orbit of the point (b,0)  is

spiral::usage ="spiral[t,a:1,b:1]is a parameter representation of the logarithmic spiral in orthonormal coordinates of the Euclidean plane.";

?spiral

spiral[t_,a_:1,b_:1] := spir[t,a].{b,0}

Examples

spiral[t,a,b]

spiral[t,a]

spiral[t]

For a = 0 the spiral degenerates to a circle:

ParametricPlot[spiral[t,.00],{t,-10*Pi,Pi/10}, AspectRatio ->Automatic,PlotRange -> All, PlotStyle-> Thick]

ParametricPlot[spir[t,.005].{1,0},{t,-100*Pi,Pi/10}, AspectRatio ->Automatic,PlotRange -> All, PlotStyle-> Thick]

ParametricPlot[spir[t,-.2].{1,0},{t,-5*Pi,5*Pi}, AspectRatio ->Automatic,PlotRange -> All, PlotStyle-> Thick]

lspir = %;

ParametricPlot[spir[-t,.2].{1,0},{t,-5*Pi,5*Pi}, AspectRatio ->Automatic,PlotRange -> All, PlotStyle-> Thick]

ParametricPlot[spir[t,-.2].{1,0},{t,-5*Pi,5*Pi}, AspectRatio ->Automatic,PlotRange -> All, PlotStyle-> Thick]

The substitution { t -> -t,a->-a} yields a reflection at the x-axis:

spiral[t,a]/.{ t -> -t,a->-a}

spiral[t,a]

ParametricPlot[spir[t,-.2].{1,0},{t,-15*Pi,15*Pi}, AspectRatio ->Automatic,PlotRange -> All, PlotStyle-> Thick]

Manipulate[ParametricPlot[spiral[t,a],{t,-50*Pi,Pi}, AspectRatio ->Automatic,PlotRange -> All,PlotPoints ->100], {a,-0.5,0.5, 0.001
}]

The spirals intersect the bundle of lines  through the origin in a  constant angle:

lines =Line[Table[{{0,0},25*{Cos[Pi*j/12], Sin[Pi*j/12]}},{j,1,24}]];

Show[Graphics[%]]

rays = %;

Show[{rays,lspir}]

logspir = %;

The corresponding velocity (tangent vector)  is

tT[t_,a_:1,b_:1] := D[spiral[t,a,b],t]

tT[t,a,b]

We show: The angle between the radius vector and the tangent vector of the spiral is constant. The cosinus of this angle is: constant, indeed:

wf[t_,a_:1,b_:1] :=spiral[t,a,b].tT[t,a,b]/Sqrt[(spiral[t,a,b].spiral[t,a,b])*(tT[t,a,b].tT[t,a,b])]

Simplify[wf[t,a,b],{a>0,b>0, t>0}]

angle[a_] :=ArcCos[ a/Sqrt[1+a^2]]

2.2. Loxodromes as Images of the Spirals under Inverse Stereographic Projection

On the sphere consider the bundle of circles through two distinct points. The isogonal trajectories of the  bundle, i.e. the curves intersecting all circles of the bundle under the same fixed angel, are called loxodromes. Since all pairs  of distinct points are Möbius equivalent we may use geographic coordinates on the sphere:  North and South pole  are the point pair, and the meridians form the circle bundle. A ship navigating under a fixed compass course moves along a loxodrome. Since stereographic projection is a conformal map, the loxodromes are transformed in logarithmic spirals under this map.  We show that the loxodromes can be obtained by the inverse stereographic projection.

The Mathematica function

?SphericalPlot3D

Context[SphericalPlot3D]

enables to plot spheres. Here is a unit sphere:

SphericalPlot3D[1,{u,0,2*Pi},{v,0,Pi},PlotStyle->Opacity[0.15],Mesh -> None]

Sph=Show[%, Boxed->False, Axes->False]

We use the stereographic projection

?sterproj

?invsterproj

invsterproj[{0,0}]

sterproj[{0,0,-1}]

sterproj[{0,0,1}]

sterproj[{0,1,0}]

to get the spherical loxodrome as the pre-image of the logarithmic spiral

sphlox[t_,a_:1]:= Simplify[invsterproj[spiral[t,a]]]

sphlox[t,a]

Now we plot a spherical loxodrome:

ParametricPlot3D[sphlox[t,0.12],{t,-12*Pi,12*Pi},PlotRange ->All,PlotPoints->200, PlotStyle -> {Red,Thick}]

lox1 =Show[%, Boxed->False,Axes->False]

Now we join the graphics:

Show[Graphics3D[{Opacity[.3],Sphere[{0,0,0}]}],Boxed-> False]

sph2=%;

Show[{lox1,sph2}]

sphloxodra = %;

We plot 8 meridians too:

Table[ParametricPlot3D[invsterproj[{t*Cos[2*Pi*i/8],t*Sin[2*Pi*i/8]}],{t,-10,100},PlotRange ->All],{i,8}]

Show[%, PlotRange -> All]

Show[{%,Sph}]

Sph3 = %;

Show[{lox1, Sph3}]

sphloxodr = %;

The lines through the origin are transformed to the meridians of the sphere.  Since the stereographic projection is a conformal map we obtain for the angle of the compass course in degrees, see Subsection 2.1.

Plot[angle[a]*180/Pi,{a,-10,10}]

Here is the cosinus of the intersection angle

Plot[a/Sqrt[1+a^2],{a,-10,10},PlotRange -> All]

We define a Module which generates3D-Graphics sphloxodr for arbitrary parameters a:

FFS[a_]:=Module[{t},
Print["Phi = ",(((ArcCos[a/Sqrt[1+a^2]]*180/Pi))^o)];Show[{Sph3,ParametricPlot3D[sphlox[t,a]*1.001,{t,-5*Pi,5*Pi},PlotRange ->All,PlotPoints->200, PlotStyle -> {Red,Thick}]}, Axes -> None, Boxed -> False]]

Try different values of a:

FFS[.005]

fflox[a_] := Show[{Sph3,ParametricPlot3D[sphlox[t,a],{t,-5*Pi,5*Pi},PlotRange ->All,PlotPoints->200, PlotStyle -> {Red,Thick}]}, Axes -> None, Boxed -> False]

Manipulate[fflox[a], {a,-2,2}]

3. Euclidean Theory of Plane Curves

In this section we  construct Modules for the geometry of plane Euclidean curves. For a detailed presentation of Euclidean differential geometry with Mathematica see the book [2] of  Alfred Gray.

3.1 Curves in the Euclidean Plane

In this subsection we calculate the curvature and the arclength of the logarithmic spiral. The function and Modules defined here can be applied to general smooth curves in the Euclidean plane.

Input the curve, e.g. :

spi[t_]=spiral[t,a]

tangent::usage="tangent[curve][t] yields the tangent unit vector of the  curve[t].";

?tangent

tangent[curve_][x_]:= Simplify[curve'[x]/Norm[curve'[x]], x∈ Reals]

tangent[curve][x]

tangent[spi][x]

Simplify[Norm[%],{a∈ Reals,x∈ Reals}]

arclength::usage="arclength[curve][x][y0,y] yields the length of the arc of the curve curve[x] for x0<x<y, curve[x] given in orthonormal Cartesian coordinates.";

arclength[curve_][x_][y0_,y_]:= Simplify[Integrate[Norm[curve'[x]],{x,y0,y}],x∈ Reals&& y∈ Reals]

spi[0]

arclength[spi][t][0,t]

ss[y_] = (Sqrt[1 + a^2]*(-1 + E^(a*y)))/a

Limit[ss[-y], y-> Infinity, Assumptions -> a>0]

This is the length of the spiral from the point {1,0} corresponding to y=0 to the origin {0,0}, its limit for y -> -Infinity:

Limit[spi[-y], y-> Infinity, Assumptions -> a>0]

Since the arclength parameter is defined up to an additive constant only we can set (for s>0, -∞<t<∞)

ss0[t_]:= Sqrt[1+a^2]*Exp[a*t]/a

This is the length of the arc  between the pole {0,0} and the spiral point spi[t].

ss0[t]

Now we calculate the curvature:

curvature::usage ="curvature[curve][x] is the Euclidean curvature of the plane curve curve[x] as a function of the general parameter x.";

curvature[curve_][x_]:= Module[{v1,v2,vn},
v1=FullSimplify[curve'[x],x∈ Reals];
v2  =FullSimplify[D[v1,x],x∈ Reals];
vn=FullSimplify[Norm[v1],x∈ Reals];
Det[{v1,v2}]/vn^3]

curvature[spi][t]

Simplify[%,{t∈ Reals,a∈ Reals}]

kk[t_] = %

The metric curvature of the spiral[t,a]  is positive for all values of a. Reversing the orientation of the curve changes  the sign of the curvature:

nspi[t_] =spi[-t]

Simplify[curvature[nspi][t]]

Eliminating t:

Eliminate[{k==kk[t],s== ss0[t]},t]

Reduce[{k==kk[t],s== ss0[t]},t,Reals]

we obtain the natural equation of the spiral - i.e. its curvature as a function of its arclength :

kspiral[s_,a_] := 1/(a*s)

Remark. The sign of k equals the sign of a; the spiral turns right for a > 0, and left for a < 0.

Example 1. As a control we calculate arclength and curvature of the circles:

Clear[circle];circle[r_][x_]:={Cos[x],Sin[x]}*r

arclength[circle[r]][x][0,2*Pi]

curvature[circle[r]][x]

Simplify[%,r>0]

Example 2. The arclength and the curvature of the graph of the function f:

graph::usage ="graph[f][x,y,...] is the canonical parameter representation of the graph {x,y,...f[x,y,...]} of the function f.";

graph[f_][x___] := {x, f[x]}

graph[f][x,y]

graph[f][x]

can be calculated symbolically :

arclength[graph[f]][x][0,y]

curvature[graph[f]][x]

ff[x_] :=Sqrt[1-x^2]

Plot[ff[x],{x,-1,1},AspectRatio -> Automatic]

curvature[graph[ff]][x]

Simplify[%, {x>-1,x<1}]

The negative value of the curvature corresponds to the fact that the curve turns left in the physical sense.

Now we return to the logarithmic spiral. We introduce the arclength as  parameter. The inverse function of

ss0[t]

is

InverseFunction[ss0]

%[s]

We define explicitely

spiral[t,a]/. t->(Log[a*s/Sqrt[1+a^2]])/a

apspiral[s_]:={(a*s*Cos[Log[(a*s)/Sqrt[1 + a^2]]/a])/Sqrt[1 + a^2], 
  (a*s*Sin[Log[(a*s)/Sqrt[1 + a^2]]/a])/Sqrt[1 + a^2]}

apspiral::usage = "apspiral[s] is the parameter representation of the logarithmic spiral depending on the angular parameter a and its arclength s.";

apspiral[s]

apspiral'[s]

Simplify[%,{a>0,s>0}]

Simplify[%.%,{a>0,s>0}]

apspiral[0]

Limit[apspiral[s], s->0]

Limit[apspiral[s], s->Infinity,Direction -> 1]

Simplify[apspiral[s].apspiral[s],{s>0,a>0}]

3.2. Control Test

We calculate the curvature of the spiral as the norm of the second derivative of apspiral[s], s the arclength.

apspiral[s]

apspiral'[s]

Simplify[%.%]

cvv[s_] := apspiral''[s]

cvv[s]

Simplify[%.%]

kspiral[s,a]

ok!

4. Frenet Formulas in the Möbius Plane (S^2)

The differential geometry of curves in the n-dimensional Möbius space is treated in [1]. The notebook [3] containes a complete set of Mathematica  tools for the differential geometry of curves in the Möbius plane. The presentation in the current notebook loxodromes.nb is earlier than and independent of the notebook [3].

4.1 Conformal Embedding of the Euclidean Space

We use the conformal model of the Euclidean plane, (more generally, the n-dimensional Euclidean space),  see [1], formula (1.2.7):

cf::usage = "cf[ulist] is the isotropic vector with last component 1 (in isotropic-orthonormal coordinates) representing the Euklidean vector u.";

cf[u_List] :=Simplify[Append[Prepend[u, u.u/2],1]]

cf[{x,y}]

Simplify[iosp[%,%]]

The components of this vector are i.o. (isotropic-orthogonal) coordinates of an isotropic vector in the (n+2)-dimensional pseudo-Euclidean space of index 1; the scalar product has the normal form in this coordinates:

iosp::usage = "iosp[vx,vy] is the normal form of the pseudo-Euclidean scalar product of index 1 in isotropic-orthonormal coordinates.";

iosp[vx_,vy_]:=Module[{n,i},If[ VectorQ[vx]== False ||  VectorQ[vy]== False || Length[vx]≠ Length[vy],Print["Incorrect arguments!"];Return[]];
n=Length[vx];
Return[-vx[[1]]*vy[[n]] - vx[[n]]*vy[[1]] + Sum[vx[[i]]*vy[[i]], {i,2,n-1}]]]

Table[iosp[stb[i],stb[j]],{i,1,dim},{j,1,dim}]//MatrixForm

The image of the Euclidean plane under the map cf is the intersection of the 3-dimensional isotropic cone

iosp[vec[x],vec[x]]== 0

with the isotropic hyperplane defined by x[4] == 1; this is the paraboloid x[1] = (x[2]^2 + x[3]^2)/2:

Plot3D[(x^2+y^2)/2,{x,-7,7},{y,-7,7},PlotRange -> All, BoxRatios->{1,1,2}]

Analogically for higher dimensions. Since the models of elliptic and hyperbolic geometries  appear as intersections of the cone with Euclidean resp. pseudo-Euclidean hyperplanes,: ellipsoids resp. hyperboloids, the Euclidean geometry is sometimes named "parabolic".

iosp[cf[{x,y}],cf[{u,v}]]

iosp[cf[{x,y}],cf[{x,y}]]

cf[spiral[t,a]]

?apspiral

apspiral[s]

Simplify[D[%,s]]

FullSimplify[%.%]

curve[t_]:= cf[apspiral[t]]

curve[t]

curve'[t]

Simplify[iosp[%,%]]

We intersect the isotropic cone with the Eucldean hyperplane orthogonal to the timelike vector po[1]  of a pseudo-Euclidean frame, defined by
-iosp[po[1], vec[x]] = 1; the result is the unit sphere in the 3-dimensional Euclidean hyperplane, which we use as  a model of the Möbius plane.  
First we define the matrix of the base transformation:

itop::usage ="itop[n:dim] is a matrix transforming an isotropic-orthonormal frame of the n-dimensional pseudo-Euclidean space of index 1 into a corresponding pseudo-orthonormal frame.";

itop[n_:dim]:=Module[{tt,i,j},
tt[i_,j_] := 0;For [i = 2,i<n,i++, tt[i,i]=1];
tt[1,1] =1/Sqrt[2];tt[1,n] =-1/Sqrt[2];
tt[n,1] =1/Sqrt[2];tt[n,n] =1/Sqrt[2];
Table[tt[i,j],{i,1,n},{j,1,n}]]

itop[]//MatrixForm

itop[].itop[]//MatrixForm

itop[].Transpose[itop[]]//MatrixForm

po[i_] := itop[].stb[i]

po[4]

iosp[%,%]

Table[iosp[po[i],po[j]],{i,1,dim},{j,1,dim}]//MatrixForm

The vectors po[i] are a pseudo-orthonormal basis. For the transformation of the coordinate we need the inverse matrix:

Inverse[itop[]]==Transpose[itop[]]

Transpose[itop[]].cf[vec[u,2]]

Simplify[%/%[[1]]]

ev = Take[%,-3]

Simplify[%.%]

We see: the image belongs to the unit sphere in the Euclidean 3-space.  The general formula for  the conformal embediing of the Euclidean space of arbitrary dimension into the Möbius space is

cfembedding::usage = "cfembedding[ulist]maps the Euclidean vector u conformally into the unit sphere of the same dimension.";

cfembedding[u_List ]:= Module[{n,vv,ww},
n=Length[u]+2;
vv=cf[u];
ww=Simplify[Inverse[itop[n]].vv];Take[ww/ww[[1]],-n+1]]

cfembedding[vec[u,2]]

FullSimplify[%.%]

In the following also the 3 - dimensional case is of interest :

cfembedding[vec[u,3]]

Simplify[%.%]

Proposition. The conformal embedding cfembedding is a conformal map.

Proof. We calculate its differential:

dcfemb[u_][i_]:= Simplify[D[cfembedding[vec[u,dim -2]],u[i]]]

dcfemb[u][1]

diffcfemb::usage ="diffcfemb[u] is the differential of the conformal embedding of the Euclidean space into the Möbius space of dimension dim.";

diffcfemb[u_]:= Transpose[Simplify[Table[dcfemb[u][i],{i,1,dim-2}]]]

diffcfemb[u]//MatrixForm

The matrix of the scalar products of the images of the basis vectors shows the statement:

Table[Simplify[(diffcfemb[u].stb[i,2]).(diffcfemb[u].stb[j,2])],{i,2},{j,2}]//MatrixForm

To avoid repeated calculation we now define the differentials for the embedding of the Euclidean Plane and the Euclidean space explicitly:

diffcfemb[u]

diffcfemb2::usage = "diffcfemb2[u] is the differential of the conformal embedding of the Euclidean plane into the Möbius sphere.";

?diffcfemb2

diffcfemb2[u_] := {{(2*Sqrt[2]*(2 - u[1]^2 + u[2]^2))/(2 + u[1]^2 + u[2]^2)^
     2, -((4*Sqrt[2]*u[1]*u[2])/(2 + u[1]^2 + u[2]^2)^
      2)}, {-((4*Sqrt[2]*u[1]*u[2])/(2 + u[1]^2 + u[2]^2)^
      2), (2*Sqrt[2]*(2 + u[1]^2 - u[2]^2))/
    (2 + u[1]^2 + u[2]^2)^2}, 
  {-((8*u[1])/(2 + u[1]^2 + u[2]^2)^2), 
   -((8*u[2])/(2 + u[1]^2 + u[2]^2)^2)}}

diffcfemb2[u]//MatrixForm

dim = 5

diffcfemb[u]

diffcfemb3::usage = "diffcfemb3[u] is the differential of the conformal embedding of the Euclidean 3-space into the Möbius space.";

diffcfemb3[u_] := {{(2*Sqrt[2]*(2 - u[1]^2 + u[2]^2 + u[3]^2))/
    (2 + u[1]^2 + u[2]^2 + u[3]^2)^2, 
   -((4*Sqrt[2]*u[1]*u[2])/(2 + u[1]^2 + u[2]^2 + u[3]^2)^
      2), -((4*Sqrt[2]*u[1]*u[3])/
     (2 + u[1]^2 + u[2]^2 + u[3]^2)^2)}, 
  {-((4*Sqrt[2]*u[1]*u[2])/(2 + u[1]^2 + u[2]^2 + u[3]^2)^
      2), (2*Sqrt[2]*(2 + u[1]^2 - u[2]^2 + u[3]^2))/
    (2 + u[1]^2 + u[2]^2 + u[3]^2)^2, 
   -((4*Sqrt[2]*u[2]*u[3])/(2 + u[1]^2 + u[2]^2 + u[3]^2)^
      2)}, {-((4*Sqrt[2]*u[1]*u[3])/
     (2 + u[1]^2 + u[2]^2 + u[3]^2)^2), 
   -((4*Sqrt[2]*u[2]*u[3])/(2 + u[1]^2 + u[2]^2 + u[3]^2)^
      2), (2*Sqrt[2]*(2 + u[1]^2 + u[2]^2 - u[3]^2))/
    (2 + u[1]^2 + u[2]^2 + u[3]^2)^2}, 
  {-((8*u[1])/(2 + u[1]^2 + u[2]^2 + u[3]^2)^2), 
   -((8*u[2])/(2 + u[1]^2 + u[2]^2 + u[3]^2)^2), 
   -((8*u[3])/(2 + u[1]^2 + u[2]^2 + u[3]^2)^2)}}

diffcfemb3[u]//MatrixForm

Table[Simplify[(diffcfemb[u].stb[i,3]).(diffcfemb[u].stb[j,3])],{i,3},{j,3}]//MatrixForm

dim = 4

4.2. Loxodromes as Conformal Embeddings of the Logarithmic Spirals

The conformal image of the logarithmic spiral is a loxodrome again: inverse stereograpic projection and conformal embedding differ by a spherical reflection only, and the results are conformally equivalent.

cfembedding[spiral[t,a]]

The difference between both maps is the spherical reflection at the circle of radius  2^(1/4) with center at the origin:

sterproj[cfembedding[{u1,u2}]]

?sphericalreflection

sphericalreflection[{u1,u2},{0,0},2^(1/4)]

The spherical reflection of a logarithmic spiral at a circle with center {0,0} and radius c is a logarithmic spiral again:

sphericalreflection[spiral[t,a],{0,0},c]

Simplify[%,{a>0,t>0,c>0}]

spir[-t,a].{c^2,0}

%==spiral[-t,a,c^2]

Spherical reflection at a circle not intersecting the logarithmic soiral transforms it into a double spiral within the circle.  Here is a logarithmic spiral:

ParametricPlot[spiral[t,.2],{t,-30,5},AspectRatio ->Automatic, PlotRange -> All]

sp1 = %;

A circle not intersecting the spiral is

ParametricPlot[{.7+.2*Cos[t],.2*Sin[t]},{t,0,2*Pi},PlotStyle->Directive[Red]]

ci1 = %;

Show[{sp1,ci1}]

The image of this spiral in a disk not intersecting the spiral under the spherical reflection at the bounding circle:

ParametricPlot[sphericalreflection[spiral[t,.2], {.7,0.},0.2],{t,-30,30},AspectRatio ->Automatic, PlotRange -> All]

spr = %;

Show[{spr,ci1}]

The spherical embeding od the spiral is the loxodrome:

ParametricPlot3D[cfembedding[spiral[t,.2]],{t,-10,10},PlotStyle -> {Thick,Red}]

Show[{sph2,%}]

4.3. Möbius Geometry of Curves in (S^2)  Applied to the Loxodromes

The conformal arclength S and the Euclidean arclength s of a plane curve are related by the formula of  H.  Liebmann

dS = Abs[k'(s)]^(1/2)ds

where k(s) denotes  the Euclidean curvature as a function of the arclength s.  This formula is a special case of (3.1.27) in [1]. 
For the logarithmic spiral we calculated in section 3.1 the curvature as  a function of the arclength

kspiral[s,a]

D[kspiral[s,a],s]

devkspiral[s_] = %

Integrate[Sqrt[-devkspiral[s]],s]

Simplify[%,{a>0,s>0}]

Integrate[Sqrt[devkspiral[s]],s]

Simplify[%,{a<0,s>0}]

In the following we consider the case a>0 only.

csspiral[s_]:=Log[s]/Sqrt[a]

Expressing the conformal natural parameter S by the arclength s

S==csspiral[s]

we get for the inverse function

s == Exp[S*Sqrt[a]]

?apspiral

apspiral[s]

?cf

Now we calculate an isotropic representation of the spiral as a function of the conformal natural parameter S:

Simplify[cf[apspiral[s]/.s-> Exp[S*Sqrt[a]]], {a>0,S>0}]

xx[S_] = %;

Simplify[iosp[xx[S],xx[S]]]

xx'[S]

Simplify[iosp[%,%],{a>0,S>0}]

We renormalize the representing vector defining

x0[S_]:= xx[S]/(Exp[S*Sqrt[a]]*Sqrt[a])

x0[S]

iosp[%,%]

Simplify[%,{a>0,S>0}]

We calculate the tangent vector which is normed already:

x1[S_]:= x0'[S]

Simplify[x1[S],{a>0,S>0}]

iosp[%,%]

Simplify[%,{a>0,S>0}]

Now we use the last of the equations (3.1.16)  in [1] to define the vector x3[S] of the Frenet frame. To this aim we calculate

xx2[S_] := x1'[S]

xx2[S]

c3[S_]:= -1/iosp[x0[S],xx2[S]]

c3[S]

Simplify[%,{a>0,S>0}]

c0[S_]:=iosp[xx2[S],xx2[S]]/2

c0[S]

Simplify[%,{a>0,S>0}]

c0[a_] =%;

x3[S_] := x0[S]*c0[a] + xx2[S]

iosp[x3[S],x3[S]]

Simplify[%,{a>0,S>0}]

Manipulate[fflox[a], {a,-2,2}]

iosp[x3[S],x0[S]]

Simplify[%,{a>0,S>0}]

iosp[x3[S],x1[S]]

Simplify[%,{a>0,S>0}]

Now we proceed as described in [1], Example 3.1.2. We use psCross to define the vector x2[S] of the Frenet frame. Since psCross is defined using pseudo-orthonormal coordinates, we have tor apply transio and transoi for the coordinate transformation to isotropic-orthonormal coordinates:

x2[S_] := -transio[].psCross[transoi[].x0[S],transoi[].x1[S],transoi[].x3[S]]

Simplify[x2[S], a>0&&S>0]

We check the scalar products of the Frenet frame:

Simplify[iosp[%,%], a>0&&S>0]

Simplify[iosp[x0[S],x0[S]], a>0&&S>0]

Simplify[iosp[x0[S],x1[S]], a>0&&S>0]

Simplify[iosp[x0[S],x2[S]], a>0&&S>0]

Simplify[iosp[x0[S],x3[S]], a>0&&S>0]

Simplify[iosp[x1[S],x1[S]], a>0&&S>0]

Simplify[iosp[x1[S],x2[S]], a>0&&S>0]

Simplify[iosp[x1[S],x3[S]], a>0&&S>0]

Simplify[iosp[x2[S],x2[S]], a>0&&S>0]

Simplify[iosp[x2[S],x3[S]], a>0&&S>0]

Simplify[iosp[x3[S],x3[S]], a>0&&S>0]

Now we calculate the conformal curvature of the loxodrome by the formula

cfk[S_] := iosp[x3'[S],x1[S]]

cfk[S]

Simplify[%,{a>0,S>0}]

cfk[a_]= (-1+a^2)/(2*a)

The frame is positively oriented:

Simplify[Det[{x0[s],x1[s],x2[s],x3[s]}],a>0&&S>0]

Ok. Now we check the Frenet formulas.  see [1], example 3.1.2:

Simplify[D[x0[S],S] == x1[S],a>0&&S>0]

Simplify[D[x1[S],S] == x0[S]*cfk[a]+ x3[S],a>0&&S>0]

Simplify[D[x2[S],S] == x0[S],a>0&&S>0]

Simplify[D[x3[S],S] == x1[S]*cfk[a] +x2[S],a>0&&S>0]

It follows:
Proposition.  The vectors x0[S], x1[S], x2[S], x3[S] form the conformal Frenet frame of the loxodrome (or the logarithmic spiral) as  functions of the conformal natural parameter S. The  conformal curvature of the loxodrome with parameter a > 0 is the constant

cfk[a]

Clear[cfk]; cfk[a_]:= (a^2-1)/(2*a)

Since cfk[a] is a monotone function of a which accepts any real value, any curve of constant conformal curvature is locally Möbius-equivalent to a loxodrome.

Solve[k==cfk[a],a]

Since a>0, only the second value is essential.

Plot[cfk[a],{a,0,2}]

Limit[cfk[a], a->Infinity]

Limit[cfk[a], a->0, Direction->-1]

For a -> Infinity the conformal curvature tends to +Infinity and the loxodrome tends to a Meridian, the cosinus of the course angle tends to 1; the angle itself to zero. Analogously for a -> 0 the cosinus of the angle tends to 0, the loxodromes tends to the equator, and the conformal  curvature tends to - Infinity.

Manipulate[lo=ParametricPlot3D[cfembedding[spiral[t,a]],{t,-5*Pi,5*Pi}, AspectRatio ->Automatic,PlotRange -> All,PlotPoints ->200];Show[{Sph,lo}], {a,0,10,.03}]

For a -> 0 the conformal curvature tends to -Infinity and the loxodrome tends to a Latitude, the cosinus of the course angle tends to 0; the angle itself to Pi/2:

Manipulate[ParametricPlot3D[cfembedding[spiral[t,a]],{t,-5*Pi,5*Pi}, AspectRatio ->Automatic,PlotRange -> All,PlotPoints ->90], {a,.1,0, .005}]

Manipulate[ParametricPlot3D[cfembedding[spiral[t,-a]],{t,-5*Pi,5*Pi}, AspectRatio ->Automatic,PlotRange -> All,PlotPoints -> 90], {a,.1,0, .005}]

The greater the absolute value of the conformal curvature is the nearer is the shape of the curve to a circle;  we have a kind of inverse behaviour, It would be better to name 1/cfk the conformal curvature, measuring the deviation of the curve from a circle. On the other hand, for a = 1 we get the spiral of conformal curvature zero,

cfk[1]

so to say a standard spiral:

Animate[Show[{Sph,ParametricPlot3D[cfembedding[spiral[t,1]],{t,-10*Pi,10*Pi}, AspectRatio ->Automatic,PlotRange -> All,PlotPoints -> 90,PlotStyle-> {Red,Thick}],ParametricPlot3D[cfembedding[spiral[t,a]],{t,-10*Pi,10*Pi}, AspectRatio ->Automatic,PlotRange -> All,PlotPoints -> 90,PlotStyle-> Thick]}], {a,-.5,1.5, .001}]

The value of the conformal curvature cfk[a] can be interpreted as the deviation of the curve from the  standard spiral. Evaluate the next cell several times replacing the value a= 0.18 by other real values.

Show[{Sph,ParametricPlot3D[cfembedding[spiral[t,1]],{t,-10*Pi,10*Pi}, AspectRatio ->Automatic,PlotRange -> All,PlotPoints ->90,PlotStyle-> {Red,Thick}],ParametricPlot3D[cfembedding[spiral[t,0.18]],{t,-10*Pi,10*Pi}, AspectRatio ->Automatic,PlotRange -> All,PlotPoints ->90,PlotStyle-> Thick]}]

4.4. Example: The Natural Conformal Parameter is Proportional to the Group Parameter of a Loxodrome.

Th Euclidean arclength of the spiral

spiral[t]

has been calculated in section 3.1 as

ss0[t]

Furthermore, the conformal natural parameter S has been calculated in section 4.3 as a function of the arclength s

csspiral[s]

Therefore the natural parameter S is the following function of the group parameter t

SS[t_] := csspiral[ss0[t]]

SS[t]

FullSimplify[%,a>0]

It follows:
Corollary.  The conformal natural parameter of the spiral spiral[t,a] - or the corresponding loxodrome - is up to an additive  conctant proportional to the parameter of the generating 1-parameter group spir[t,a].

4.5.  The Conformal  Curvature Expressed by the Euclidean Curvature of a Plane Curve

Let fk=fk[s] be the natural equation of a curve in the Euclidean plane, i.e. its Euclidean curvature as a function of its arclength. Since the conformal curvature is invariant under Euclidean motions it can be expressed by the Euclidean curvature. This expression is comparatively complicated; we obtained

cfcurvature::usage ="If fk[s] is the Euclidean curvature of a plane curve as a function of its areclength, then cfcurvature[fk][s] is its conformal curvature.";

cfcurvature[fk_][s_]:=Simplify[-Sign[fk'[s]]*(4*fk[s]^2*fk'[s]^2+5*fk''[s]^2-4*fk'[s]*fk'''[s])/(8*fk'[s]^3)]

Remark. The factor -(Sign[fk’[s]] added at the revision March 2, 2012.

cfcurvature[fk][s]

Clearly, at points with fk'[s] = 0 - the so called M-flat points - the conformal curvature is not defined; in particular this is the case  for all points of lines and circles.  For the logarithmic spiral we obtain the correct resultIt;  Euclidean curvature has been calculated in Section 3.1:

kspiral[s,a]

Setting

fksp[s_] := kspiral[s,a]

we obtain  the confirmation

cfcurvature[fksp][s]

Simplify[%== cfk[a], {s>0,a>0}]

The general formula for the conformal natural parameter as a function of the Euclidean  arclength is

natpar[fk_][s_] := Integrate[Sqrt[Abs[fk'[s]]],s]

natpar[fk][s]

For the spiral we obtain the result already calculated in section 4.3:

natpar[fksp][s]

4.6. The Spiral Group as a Subgroup of the Pseudo-Orthogonal Group O(1, 3)

In this subsection we shall give a representation of the spiral group as a  1-parameter subgroup of the pseudo-orthogonal group.  We define

confeucl[u_List]:= Prepend[Append[u,(1-u.u/2)/Sqrt[2]],(1+u.u/2)/Sqrt[2]]

confeucl::usage ="confeucl[u_List] yields an isotropic vector representing the point with orthonormal coordinates u, Length[u] = dim -2, in pseudo-orthonormal coordinates.";

?confeucl

confeucl[{x,y}]

Simplify[pssp[%,%]]

Simplify[pssp[%%, -stb[1]+stb[4]]]

The image of the Euclidean plane under the map confeucl is the paraboloid obtained as the intersection of the upper half of the isotropic cone

pssp[vec[x],vec[x]]== 0

with the hyperplane

pssp[vec[x],(-stb[1]+stb[4])/Sqrt[2]] == 1

Reduce[{pssp[vec[x],(-stb[1]+stb[4])/Sqrt[2]] == 1,pssp[vec[x],vec[x]]== 0},vec[x]]

The row vectors of the following matrix are an isotropic orthogonal basis of the pseudo-Euclidean vector space of index 1:

transio[d_:dim] :=Prepend[ Append[Table[stb[i,d],{i,2,d-1}],(stb[1,d]+stb[d,d])/Sqrt[2]],(stb[1,d]-stb[d,d])/Sqrt[2]]

transio::usage = "transio[d] is a square matrix of order d transforming a pseudo-orthogonal basis of the d-dimensional pseudo-Euclidean vector space of index 1 into an isotropic-orthonormal basis. The default value of d is d= dim. The rows of the matrix form the isotropic-orthomormal basis.";

?transio

transio[]//MatrixForm

Their scalar products are

Table[pssp[transio[][[i]],transio[][[j]]],{i,dim},{j,dim}]

%//MatrixForm

ispir::usage = "ispir[t,a] is a representation of the spiral transformation spir[t,a] in isotropic-orthonormal coordinates of the 4-dimensional pseudo-Euclidean vector space of index 1.";

ispir[t_,a_] :={{(E^(-a t)),0,0,0},{0,Cos[t],-Sin[t],0},{0,Sin[t],Cos[t],0},{0,0,0,(E^(a t))}}

ispir[t,a]//MatrixForm

ispir[t,a] is a 1-parameter subgroup depending on the parameter a:

Simplify[ispir[t,a].ispir[s,a]== ispir[t+s,a]]

transio[]//MatrixForm

transoi::usage = "transoi[d] is the inverse (= transposed) matrix to transio[d]. It transforms an isotropic-orthonormal basis into a pseudo-orthogonal basis. The default value of d is dim.";

transoi[d_:dim]:= Inverse[transio[d]]

transoi[]//MatrixForm

psospir::usage= "psospir[t,a] is a representation of the spiral transformation spir[t,a] in 4-dimensional pseudo-orthogonal coordinates.";

psospir[t_,a_] := transio[].ispir[t,a].transoi[]

psospir[t,a]//MatrixForm

ExpToTrig[%]

%//MatrixForm

Simplify[Table[pssp[%[[i]],%[[j]]],{i,4},{j,4}]]

psospir[t,a].confeucl[{x,y}]

Simplify[Exp[t*a]*%== confeucl[spir[t,a].{x,y}]]

References

[1] Rolf Sulanke. Differential Geometry of the Möbius Space I. On my homepage.

[2] Alfred Gray, Simon Salamon, Elsa Abbena. Modern Differential Geometry of Curves and Surfaces with Mathematica.
Third ed. CRC Press. 2006.

[3] R. Sulanke.  Curves in the Möbius Plane.Mathematica notebook mdgCurves2D.nb. On my homepage.

Homepage

http://www2.mathematik.hu-berlin.de/~sulanke

E - Mail: sulanke@mathematik.hu-berlin.de