Curves in the Möbius Plane

by

Rolf Sulanke

Finished July 29, 2012
Revision finished August 8, 2019.
Mathematica v. 8.0.1, v.11.3, v. 12.0.

Summary

In this notebook we develop Mathematica tools for the Möbius differential geometry of plane curves. We construct Modules for the calculation of their Möbius invariants: the natural parameter and the conformal curvature. Frenet frames and Frenet formulas for curves in the  Möbius plane are deduced. We express the natural conformal parameter and the conformal curvature by  Euclidean invariants of the curve.  A short presentation of Euclidean curve theory is given in my paper [ECG] which together with a corresponding notebook EuCurves.nb  may be downloaded from my homepage.  To any generally curved curve in the Möbius n-sphere belongs a  so called anti-curve uniquely and equivariantly defined by the last vector of the isotropic-orthogonal Frenet frame.  The osculating circles of the plane curve are related to the adapted frames, Modules to calculate and plot these circles are presented. The calculations and examples illustrate and complete the presentation of the subject in my  yet not finished book [mdg]. 
The revision leads to many corrections and improvements. The Mathematica packages necessary for working with the notebook remained unchanged, they may be downloaded here: moebpack.zip. 

Before starting  the revision I tested the first edition of this notebook (finished 2012) with the actual Mathematica v. 11.3.  It came out, that the evaluations need often more time than earlier;  some evaluations, in particular some simplifications of symbolic expressions  by the function FullSimplify, couldn’t be completed in a reasonable time, or Mathematica exited without result. Thus I decided to work out the revision with Mathematica v. 8.0.1.  Finishing the revision I tested the notebook again with the two mentioned versions of Mathematica.  Unfortunately, the first test results are confirmed, see the evaluation results described in red text cells in subsections 3.2.6, 3.2.7. The used Mathematica versions are installed on the same workstation with an Intel Core i7 processor and 16 GB Ram under Linux open SUSE 42.3. The  third test, if mentioned, results noticed after “Windows 10”, is run on a laptop with an Intel Core i7 processor and 8 GB Ram, with Mathematica v. 11.3 under Windows 10..

Keywords

Möbius group,  generally curved plane curves, Möbius invariant natural parameter,  Möbius invariant curvature,  anti-curve, Frenet frame,  osculating circles, isotropic-orthogonal coordinates, pseudo-orthonormal coordinates, Minkowski  space.

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.

Initialization

Before starting to work interactively with this notebook first time, read this section carefully and  make the necessary preparations. Later it suffices to call the menu item "Evaluation. Evaluate Initialization Cells".

The Needed Packages

For working with the notebook you need the packages
euvec.m, vectorcalc.m,  neuvec.m,  mspher.m, mcirc.m, moeb2.m, eudiffgeo.m.
You may download these and other packages here .

Insert the notebook and the downloaded (or other needed) packages into a common directory , enter the path of this directory into the  appropriate of the next two cells,  and make make this cell an initialization cell, e.g.

For Windows:

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

For Linux:

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

Directory[]

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:

The Initialization

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

1. Activite Evaluation/Evaluate Initialization from the menu.

Needs["moeb2`"]

2. Set the dimension and the index:

By default this is done as follows. In this notebook we will  consider curves in the 2-dimensional  sphere  or plane.  Therefore we set the dimension dim and the index ind  of the vector space

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

dim =4;

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

ind =1;

Remark 
The global constants dim > 0 and ind ≥ 0 appear in many functions as default arguments of the dimension and the index; without fixing it as  integers many error messages will be created, and the functions will not work. The order in which the two steps of the initialization are carried out is deciding: In case you defined dim and ind already before loading the packages, they will be fixed for all the imported functions as the default value of these constants.  Defining them after the packages are loaded makes it possible to change the value of dim any time, if wanted.

$Assumptions

Most of our variables and functions are considered in the real domain.  Therefore we make the following default assumptions:

?$Assumptions

$Assumptions=s∈Reals&&t∈Reals&&u∈Reals&&v∈Reals&&w∈Reals&&x∈Reals&&y∈Reals&&z∈Reals&&a∈Reals&&b∈Reals&&c∈Reals;

$Assumptions

1.  Lists of Symbols and their Usages

In this section one finds tables of the symbols introduced in the imported packages and in the Global Context.
To get the usages click on the name! If this does not work, enable Dynamic Updating in the Evaluation Menu.

1.1.  Symbols in the Package vectorcalc.m

?vectorcalc`*

1.2. Symbols in the Package euvec.m

?euvec`*

unit[1][{u}]

sphericalreflection[{x,y},{0,0},2^(1/4)]

1.3. Symbols in the Package eudiffgeo.m

?eudiffgeo`*

??tangent

1.4. Symbols in the Package neuvec.m

?neuvec`*

Options[orthonorm]

1.5. Symbols in the Package mspher.m

?mspher`*

1.6. Symbols in the Package mcirc.m

?mcirc`*

1.7. Symbols in the Package moeb2.m

?moeb2`*

1.8.  Symbols in the Global Context

?Global`*

2. Pseudo-Euclidean Linear Algebra

The packages neuvec.m and moeb2.m contain important tools enhancing Mathematica  with concepts  of pseudo-Euclidean linear algebra. In this section we describe some of these tools and introduce some new functions which we need in Möbius differential geometry.

2.1. Test of some Functions of neuvec.m

2.1.1. Some Often Used Functions

ide[]

ch[%]

pssp[ide[],ide[]]

dual[vec[x]]

normalize[vec[x]]

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

ch[null[]]

ch[{0,1}]

ch[{0,1}]

ch[{2,1,1,1}]

ch[{1,0,0,1}]

ch[{1,0,Cos[t],Sin[t]}]

normalize[{1,0,Cos[t],Sin[t]}]

ch[{0,a,b,c}]

ch[{a,0,0,0}]

Table[ch[randomv[]], {i,100}]

Table[normalize[randomv[]], {i,10}]

Table[pssp[%[[i]],%[[i]]],{i,10}]

orthonorm[Table[randomv[],{i,4}]]

Table[pssp[%[[i]],%[[j]]],{i,dim},{j,dim}]//MatrixForm

Chop[%]

orthonorm[Table[randomv[],{i,6}]]

Table[Chop[pssp[%[[i]],%[[j]]]],{i,dim},{j,dim}]//MatrixForm

indexorder[%%]

Table[Chop[pssp[%[[i]],%[[j]]]],{i,dim},{j,dim}]//MatrixForm

indexorder[{stb[2],stb[1] +stb[4],stb[3],stb[1]-stb[4]}]

psfilter[{stb[2],stb[1] +stb[4],stb[3],stb[1]-stb[4]}]

orthonorm[{stb[2],stb[1] +stb[4],stb[3],stb[1]-stb[4]}]

psfilter[%]

indexorder[%%]

orthopair[stb[1]]

orthopair[stb[2]]

orthopair[stb[1] +stb[2]]

orthopair[stb[1] +2*stb[2]]

aa = randomv[]; orthopair[aa]

Table[pssp[%[[i]],%[[j]]],{i,2},{j,2}]//MatrixForm

orthopair[{1,1, Cos[t],Sin[t]}]

Simplify[%,t>0]

pr[stb[4]+stb[3], vec[x]]

pssp[stb[3]+stb[4],%]

pr[stb[1]+2stb[3], vec[x]]

pssp[stb[1]+2stb[3],%]

Simplify[%]

pr[vec[x], vec[x]]

pr[vec[x], vec[y]]

Simplify[pssp[vec[x],%]]

psCross[stb[1],stb[3],stb[4]]

psCross[stb[1]+stb[2],stb[3],stb[4]]

Det[{stb[1]+stb[2],stb[3],stb[4],vec[x]}]

pscross[{stb[1],stb[3],stb[4]}]

pscross[{stb[1]+stb[2],stb[3],stb[4]}]

2.1.2.  New Function: indexorder

?indexorder

dim = 5; ind =2;

vlist ={stb[5], stb[1],stb[2]+stb[3], stb[2],{1,1,0,1,1}}

indexorder[vlist]

indexorder[%]

Map[ch,%]

dim = 4;ind =1;vec[x]

dual[%]

2.2. Isotropic-Orthonormal  Bases

?iob

iob[0]

iob[2]

iob[3]

iob[4]

?io

io[]//MatrixForm

iosp[vec[x],vec[y]]

iosp[vec[x],vec[y]]== vec[x].io[].vec[y]

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

?transio

transio[]//MatrixForm

transio[].iob[2]

transio[].iob[3]

transoi[].stb[1]

%==iob[0]

transoi[].stb[4]

Of course, the matrices transio[], transoi[] and the corresponding transformations are inverse to each other:

transio[].transoi[]//MatrixForm

transoi[].stb[dim ] == iob[dim -1]

transio[].iob[dim -1] == stb[dim ]

?psCross

psCross[iob[0],iob[1],iob[2]]

%==-iob[0]

This is correct since iob[i] yields the pseudo-orthogonal coordinates of the isotrop-orthogonal basis vectors.

transio[].psCross[transoi[].stb[1],transoi[].stb[2],transoi[].stb[3]]

This corresponds to - iob[0]

transoi[].% == -iob[0]

We have the usual rule in pseudo-orthonormal coordinates:

Simplify[Det[{iob[0],iob[1],iob[2],vec[x]}]== pssp[psCross[iob[0],iob[1],iob[2]],vec[x]]]

In the definition of psCross pseudo-orthonormal coordinates are used. In isotropic-orthogonal coordinates one has to use the cross products iocross, resp., ioCross:

?iocross

??ioCross

They are defined using the Euclidean cross product composed  with the isotropic dual

?iodual

iosp[vec[x],vec[y]] == vec[x].iodual[vec[y]]

2.3. The Function sphrefl

?sphrefl

FullSimplify[sphrefl[{x,y}] -stepro[transoi[].confeuklid[{x,y}]]]

FullSimplify[sphrefl[{x,y}] -euklid[transio[].invstepro[{x,y}]]]

FullSimplify[wedge[transio[].invstepro[{x,y}],confeuklid[sphrefl[{x,y}]]]]

FullSimplify[wedge[invstepro[sphrefl[{x,y}]],transoi[].confeuklid[{x,y}]]]

2.4. Conformal Embeddings of Simply Connected Space Forms

2.3.1. Spheres of Radius r

dim = 4;

Let u be a radius vector of the point of the hypersphere u.u=r^2 in the Euclidean vector space of dimension dim -1.  Then an isotropic representative  of this point is

confsph[u_List]:= stb[1]*Sqrt[u.u] + Prepend[u,0]

confsph::usage = "confsph[u_List] maps the Euclidean n-space into the isotropic cone of the pseudo-Euclidean (n+1)-space of index 1 (in pseudo-orthogonal coordinates); the  hypersphere u.u = r^2 is mapped to the intersection of the isotropic cone with the Eucldean hyperplane x{1] = r.";

?confsph

dim = 6

confsph[stb[5,5]]

confsph[stb[1,5]*3]

The next two cells produce non-isotropic vectors; the assumption u.u = r^2  is not satisfied!

confsph[stb[1,5]]

confsph[stb[1,5]*3]

confsph[null[5]]

dim= 4;

cfsph[u_,v_,r_:1] := confsph[r*{Cos[u]*Cos[v],Cos[u]*Sin[v],Sin[u]}]

cfsph::usage ="cfsph[u,v,r:1] represents the point with geographic coordinates u,v of the sphere of radius r as an isotropic  representative of a point of the Moebius sphere.";

?cfsph

Simplify[cfsph[u,v]]

Simplify[cfsph[u,v,r],r>0]

Simplify[pssp[%,%]]

transio[] transforms the pseudo-orthonormal coordinates into the iso-tropic orthonormal ones:

iocfsph[u_,v_,r_:1]:=transio[].cfsph[u,v,r]

os =Simplify[iocfsph[u,v,r],r>0]

FullSimplify[%.io[].%]

Conversely, transoi[] transforms the isotropic orthonormal coordinates into the  pseudo-orthonorma ones:

Simplify[transoi[].os]

The following linear combination reproduces the pseudo-orthonormal representation:

Simplify[Sum[iob[j]*os[[j+1]],{j,0,dim -1}]]

2.3.2. The Euclidean Space

We assume that the {x,y,z} are orthonormal Cartesian coordinates in the Euclidean space. Considering the Euclidean model with respect to isotropic-orthonormal  corordinates we define the embedding function

?confeuklid

dim = 4;

confeuklid[{x,y}]

confeuklid is similar, but not the same as transio[].confeucl:

confeucl[{x,y}]

Simplify[transio[].%]

dim =6; confeuklid[vec[x,4]]

Calculating the differential of the embedding isoeuclid one easily  observes

D[confeuklid[vec[x,4]], x[i]] = {0, stb[i], x[i]}

e. g.:

D[confeuklid[vec[x,4]], x[2]]

It follows (see alsothe formula for (ds^2) on p.9, section 1.2 of [mdg]):
Lemma. The pseudo-Euclidean embedding of the Euclidean n-space into the isotropic cone is an isometry.

In particular, the pseudo-Euclidean scalar product of the images of two tangent vectors of the model in the pseudo-Euclidean vector space may be replaced by the Euclidean scalar product of the vectors itself.

dim = 4;

The transformation to pseudo-orthonormal coordinates is realized by

confeucl[u_List] := transoi[].confeuklid[u]

confeucl[vec[x,2]]

{(1/(Sqrt[2]))+((((x[1])^2)+((x[2])^2))/(2 (Sqrt[2]))),x[1],x[2],-(1/(Sqrt[2]))+((((x[1])^2)+((x[2])^2))/(2 (Sqrt[2])))}

Simplify[pssp[%,%]]

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

dim = 5;

confeucl[{x,y,z}]

Simplify[pssp[%,%]]

transio[].%%

Simplify[%]

%.io[].%

dim =6

io[]//MatrixForm

iob[1]

confeucl[vec[x,4]]

transio[].%

Simplify[%]

Simplify[%.io[].%]

2.3.3. The Hyperbolic  Space

We consider the pseudo-Euclidean model of the n-dimensional hyperbolic space: the upper half of the hyper-hyperboloid in the (n+1)-dimensional pseudo-Euclidean vector space of index 1 orthogonal to stb[dim], defined by

pssp[u,stb[dim]]= 0,pssp[u,u] = - r^2, pssp[stb[1],u] < 0.

The embedding into the Möbius space as a half-hypersphere is defined by the representing isotropic vector

?confhyp

dim =4

confhyp[{Cosh[t], Sinh[t]}]

?stepro

stepro[confhyp[{Cosh[t], Sinh[t]}]]

Plot[Coth[t/2],{ t,-5,5}]

pssp[%,%]

Simplify[%]

confhyp[{u,v,w}]

pssp[%,%]

Here is a parameter representation of the hyperbolic plane in the Möbius sphere:

hyp2D[t_,u_,r_:1] := stb[1]*Sqrt[r^2 + t^2] +stb[2]*t*Cos[u] +stb[3]*t*Sin[u] -stb[4]*r

hyp2D::usage ="hyp2D[t,u,r] is a parameter representation of representatives of the points of the hyperbolic plane of curvature -1/r^2 in the Möbius sphere (in pseudo-orthonormal coordinates); t,u are polar coordinates.";

?hyp2D

hyp2D[t,u,r]

transio[].%

%.io[].stb[1]

Simplify[%%.io[].%%]

2.3.4.  The Spherical Map sphmap

In the following we need a function mapping the isotropic vectors of dimension n+1 onto the corresponding point of the n-sphere:

?sphmap

sphmap[{1,Cos[u]*Cos[v],Sin[u]*Cos[v],Sin[v]}]

ParametricPlot3D[%,{u,0,2*Pi},{v,-Pi/2,Pi/2},PlotStyle->Opacity[0.2],Boxed -> False, Axes->False,Mesh -> None]

sph1 = %;

sph1::usage = "sph1 is a transparent graphic of the unit sphere.";

Here is the Möbius model of the hyperbolic plane as a hemisphere:

ParametricPlot3D[sphmap[hyp2D[t,u]],{u,0,2*Pi},{t,0,10},PlotRange -> All]

3. Curves in Dimension 2

3.1 Isotropic Representatives of Euclidean Curves

dim

xy[t_] :={x[t],y[t]}

Often it is convenient to assume that t coincides with the Euclidean arc length parameter of the curve. Then the following assumptions assu are true:

?assu

assu[xy][t]

The standard isotropic representation of an Euclidean point is

?confeuklid

confeuklid[{x,y}]

Simplify[iosp[%,%]]

Now we define the standard isotropic representation of a curve in the Euclidean plane by

?mgcurve

ncxx[t_]:= mgcurve[xy][t]/Sqrt[xy'[t].xy'[t]]

ncxx[t]

The assumptions  ASSU for the isotropic representative of a curve in the Möbius space:

Clear[c];ASSU[c_][t_]:= And[c[t].io[].c[t]== 0,c'[t].io[].c'[t]== 1, c[t].io[].c'[t]== 0,c'[t].io[].c''[t]== 0,c[t].io[].c''[t]== -1,c[t].io[].D[c[t],{t,3}]== 0, c'[t].io[].D[c[t],{t,3}]+ c''[t].io[].c''[t]== 0, c'[t].io[].D[c[t],{t,4}]== -3 c''[t].io[].D[c[t],{t,3}]]

are satisfied for ncxx[t]:

Simplify[ASSU[ncxx][t]]

Example: graph[f][t]

?graph

graph[f][t]

D[%,t]

mgcurve[graph[f]][t]

Simplify[%.io[].%]

3.2. The Frenet Frame

3.2.1. A  Moving Frame of 2nd Order

In Lemma 3.1.7, p. 57 of [mdg], a special moving frame of 2nd order for a curve without 2-flat points has been defined. We translate this definition into Mathematica terms defining the vectors mfre[i], i = 0,1,3, of a plane curve.  The  remaining vector mfre[2] of the frame is uniquely defined using the cross product. For the calculation we use a fixed isotropic orthonormal coordinate system in the pseudo-Euclidean vector space of index 1.  The general assumption is that there is given a curve γ[t] in the Möbius sphere represented by a regular curve of  isotropic vectors satisfying the regularity conditions  (see [mdg],(3.1.1), p. 50)

reg[xx_][t_] := And[xx[t].io[].xx[t] == 0,xx'[t].io[].xx'[t] >0]

reg[mgcurve[xy]][t]

Simplify[reg[ncxx][t]]

?circle2D

We need a parameter representation of a plane circle wit radius r and center at the origin:

circle2D[t]

reg[mgcurve[circle2D]][t]

Simplify[%]

Applying Lemma 3.1 .7, p .58, of [mdg] we define three vectors of the moving frame of the curve by

Clear[mfre]

mfre[0][c_][t_] := c[t]

mfre[1][c_][t_] := D[c[t],t]

Applying the last equation of (3.1.16) in [mdg], p.58, we set

mfre[3][c_][t_] := D[c[t],{t, 2}] +c[t]*(D[c[t],{t, 2}].io[].D[c[t],{t, 2}])/2

Then the remaining fourth vector is defined by the cross product:

mfre[2][c_][t_]:= -iocross[{mfre[0][c][t],mfre[1][c][t],mfre[3][c][t]}]

Now we check the isotropic orthogonality properties of the frame mfre[i][icu][t].

Simplify[Table[iosp[mfre[i][ncxx][t],mfre[j][ncxx][t]],{i,0,3},{j,0,3}]]//MatrixForm

Simplify[Det[Table[mfre[i][ncxx][t],{i,0,3}]]]

It follows

Lemma.  For a normed isotropic representative c[t] of a regular curve in the Möbius sphere the constructed moving frame mfre[i][c][t] coincides with the special moving frame of 2nd order defined in Lemma 3.1.7, p. 58 of [mdg]}. It is a positively oriented, isotropic-orthogonal moving frame equivariantly associated with the curve, in isotropic-orthogonal coordinates of the pesudo-Euclidean 4-space. ■

For the parameter representation of a general plane curve we set

xy[t]

In case of a plane curve xy[t] the moving frame  is {mfre[i][mgcurve[xy]][t], i = 0,...,3.  One easily verifies the relations using the assumptions assu. The representative mgcurve[xy][t] itself satisfies the relations ASSU iff t is the Euclidean arc lengthof the plane curve xy; for shortness we set

css =assu[xy][t]

Simplify[ASSU[mgcurve[xy]][t],css]

Simplify[Table[mfre[i][mgcurve[xy]][t].io[].mfre[j][mgcurve[xy]][t],{i,0,3},{j,0,3}],css]//MatrixForm

The components of the moving frame may be expressed by the components of xy[t] and its derivatives:

FullSimplify[mfre[0][mgcurve[xy]][t],css]

FullSimplify[mfre[1][mgcurve[xy]][t],css]

FullSimplify[mfre[2][mgcurve[xy]][t],css]

FullSimplify[mfre[3][mgcurve[xy]][t],css]

We yet calculate the first three  derivatives of the representative mfre[0][mgcurve[xy]][t]:

v[3][t_] =Simplify[D[mfre[0][mgcurve[xy]][t],{t,3}],css,TimeConstraint-> Infinity]

v[2][t_] =Simplify[D[mfre[0][mgcurve[xy]][t],{t,2}],css,TimeConstraint-> Infinity]

v[1][t_] =Simplify[D[mfre[0][mgcurve[xy]][t],t],css,TimeConstraint-> Infinity]

v[0][t_] =Simplify[mfre[0][mgcurve[xy]][t],css,TimeConstraint-> Infinity]

Simplify[D[mfre[0][mgcurve[xy]][t],{t,3}].io[].mfre[2][mgcurve[xy]][t],css,TimeConstraint-> Infinity]

Now, using the Frenet formulas of Euclidean curve theory, one obtains for this expression

-y'[t] Derivative[3][x][t]+x'[t] Derivative[3][y][t]== D[k[t],t],

where

k[t_]:= curvatures[xy][t][[1]]

denotes the Euclidean  curvature of the curve with the sign, as it appears in the Frenet formula, and t  ts arc length. Furthermore one calculates

FullSimplify[-(((((x''[t])^2)+((y''[t])^2)))^2)+((Derivative[3][x][t])^2)+((Derivative[3][y][t])^2) == ( D[k[t],t])^2,css]

3.2.2. The Derivation Equations of the 2nd Order Frame

Now we calculate the derivatives of the vectors mfre[i] and find the coefficients of the second order frame D[mfre[i].io[.mfre[j], which we need for the next reduction step.  We consider a general regular plane curve xy[t]  with the normed isotropic representative

ncxx[t]

Simplify[D[mfre[0][ncxx][t],t]== mfre[1][ncxx][t]]

We need the following coefficients of the derivation equations

Clear[w01];w01[c_][t_]:=-D[mfre[1][c][t],t].io[].D[mfre[1][c][t],t]/2

w02[xx_][t_] :=- D[mfre[2][xx][t],t].io[].mfre[3][xx][t]

FullSimplify[w01[ncxx][t]]

FullSimplify[w01[ncxx][t]== -  D[mfre[1][ncxx][t],t].io[].mfre[3][ncxx][t]]

FullSimplify[w02[ncxx][t]== D[ncxx[t],{t,3}].io[].mfre[2][ncxx][t]]

Simplify[D[mfre[0][ ncxx][t],t]== mfre[1][ ncxx][t]]

Simplify[D[mfre[1][ ncxx][t],t]==  mfre[0][ ncxx][t]*w01[ncxx][t]+mfre[3][ ncxx][t]]

Simplify[D[mfre[2][ncxx][t],t] == mfre[0][ncxx][t]*w02[ncxx][t]]

Simplify[D[mfre[3][ncxx][t],t] == mfre[1][ncxx][t]*w01[ncxx][t]+mfre[2][ncxx][t]*w02[ncxx][t]]

Summarizing we proved

Proposition.  Let ncxx[t] be the  normed representative  of a regular curve in the Möbius sphere.  With the abbreviation

ℽ[i] := mfre[i][ncxx][t]

the moving frame of second  order defined in the last subsection satisfies the following derivation equations:

ℽ[0]' == ℽ[1]

ℽ[1]' == ℽ[0]ω01 + ℽ[3]

ℽ[2]' == ℽ[0] ω02

ℽ[3]' == ℽ[1]ω01 + ℽ[2] ω02

with the coefficients

ω01 = w01[ncxx][t]

w01[ncxx][t]== -ncxx''[t].io[].ncxx''[t]/2

ω02 = Simplify[w02[ncxx][t]]

Simplify[w02[ncxx][t]==  D[ncxx[t],{t,3}].io[].mfre[2][ncxx][t]]

The frame and the derivation equations coincide with those contained in Lemma 3.1.7,  and formula (3.1.17),  p.58, of [mdg].

3.2.3. Example. The Circle

We now calculate the moving frame of 2-nd order defined in 3.2.1 for the circle

?circle2D

circle2D[t]

Simplify[assu[circle2D][t]]

mgcurve[circle2D][t]

mfre[0][mgcurve[circle2D]][t]

mfre[1][mgcurve[circle2D]][t]

Simplify[mfre[2][mgcurve[circle2D]][t]]

Simplify[mfre[3][mgcurve[circle2D]][t]]

Simplify[Table[mfre[i][mgcurve[circle2D]][t].io[].mfre[j][mgcurve[circle2D]][t],{i,0,3},{j,0,3}]]//MatrixForm

Simplify[Table[D[mfre[i][mgcurve[circle2D]][t],t].io[].mfre[j][mgcurve[circle2D]][t],{i,0,3},{j,0,3}]]//MatrixForm

Simplify[w01[mgcurve[circle2D]][t]]

Simplify[w02[mgcurve[circle2D]][t]]

3.2.4. Curves in the Euclidean Plane Parametrized by their Arc Length

In the following we assume that t coincides with the Euclidean arc length of the curve xy. This allows to use the assumptions css. We obtain the derivation equations as special cases of the formulas for the general curve of normed representatives given in the  Proposition 3.2.2.

mgcurve[xy][t]

css

FullSimplify[ASSU[mgcurve[xy]][t],css]

Simplify[D[mfre[0][ mgcurve[xy]][t],t]- mfre[1][ mgcurve[xy]][t],css]

Simplify[D[mfre[1][ mgcurve[xy]][t],t]- mfre[0][ mgcurve[xy]][t]*w01[ mgcurve[xy]][t]-mfre[3][  mgcurve[xy]][t],css]

We define the coefficient c01[t] =w01[ mgcurve[xy]][t]

Clear[c01];c01[t_] := w01[ mgcurve[xy]][t]

Simplify[c01[t]]

Simplify[D[mfre[2][ mgcurve[xy]][t],t],css]

Table[Simplify[%.io[].mfre[i][ mgcurve[xy]][t],css],{i,0,3}]

The only non vanishing coefficient is the coefficient c02[t]:

c02[t_] = -Det[{xy'[t],D[xy[t],{t,3}]}]

Simplify[w02[ mgcurve[xy]][t]-c02[t],css]

Simplify[D[mfre[2][ mgcurve[xy]][t],t]-mfre[0][ mgcurve[xy]][t]*c02[t],css]

Simplify[D[mfre[3][ mgcurve[xy]][t],t]-mfre[1][ mgcurve[xy]][t]*c01[t]-mfre[2][ mgcurve[xy]][t]*c02[t],css]

OK! The derivation equations of 2nd order of the generally curved curve have the expected shape. The essential coefficients are c01, c02. The derivation equation is a special case of (3.1.17), p.58 of [mdg].

FullSimplify[w01[mgcurve[xy]][t],css,TimeConstraint -> Infinity]

FullSimplify[w02[mgcurve[xy]][t],css,TimeConstraint -> Infinity]

It follows
 c01[t}==w01[mgcurve[xy]][t] == -k^2/2 , 
 c02[t}==w02[mgcurve[xy]][t] == k ‘[t], 
 k the Euclidean curvature and t the arc length of the curve.

3.2.5. The Natural Parameter. Pick's Invariant

In [mdg] we defined the parameter function lambda to obtain the natural conformal  (or Möbius) parameter s by

ds= dt/lambda

see formulas (3.1.23-24), p.59, "Liebmann's formula", where lambda is

lambda::usage = "ds = dt/lambda[repr][t] is the differential of the natural conformal (or Moebius) parameter of a curve without 2-flat points in the Moebius space isotropically represented by the normed representation repr[t].";

Clear[c,t,lambda];lambda[c_][t_] :=(D[c[t],{t, 3}].io[].D[c[t],{t,3}]-(D[c[t],{t, 2}].io[].D[c[t],{t, 2}])^2)^(-1/4)

For shortness we set

Clear[lambda2D];lambda2D[c_][t_] := lambda[mgcurve[c]][t]

lambda2D::usage ="For a generally curved  plane curve c[t], t its Euclidean arclength, ds =dt/lambda2D[c][t] is the differential of the natural conformal parameter of the curve.";

lambda2D[xy][t]

We prove the following identity giving another expression of lambda2D[t] assuming

css==assu[xy][t]

Simplify[1/lambda2D[xy][t]^4 -(y'[t] Derivative[3][x][t]-x'[t] Derivative[3][y][t])^2,css]

In the book W. Blaschke, G. Thomsen [BT] , § 25, p.108,  one finds the following formula for the differential of the natural conformal parameter s of a plane curve with the isotropic representative  x[t], t an arbitrary parameter:

ds=dt (Sqrt[((Abs[(Det[(Det({x,x',x'', Derivative[3][x]})])])/((pssp(x', x'))^2))])

The parameter s has been found by G. Pick and is known under the name Pick's invariant.  One easily checks that dS does not depend on the choice of the representative  or the parameter representation.  We define now the corresponding function of the curve, notation ds -> moebs:

moebs[c_][t_] := Module[{ss,fs,fd,hh,tt},
If[Length[c[t]]≠4, Print["Invalid argument!"];Return[]];
fd[ss_]:= Det[Table[D[c[ss],{ss,i}],{i,0,3}]];
hh[ss_]:=D[c[tt],tt]/.tt->ss;
fs[ss_]:=((fd[ss]/(iosp[hh[ss],hh[ss]])^2)^2)^(1/4);
fs[t]]

moebs::usage = "moebs[c][t] is the derivative of the canonical Möbius parameter of the plane curve without 2-flat points, with the isotropic representatives c[t] in isotropic-orthogonal coordinates. The 2-flat points yield zeros of moebs[c][t].";

The canonical Möbius  parameter is the integral

confs[c_][t_] :=Integrate[moebs[c][t],t]

confs::usage = "For the isotropic curve c[t] in the four-dimensional pseudo-Euclidean space the indefinite integral confs[c][t] is the canonical parameter, namely Pick's invariant: the canonical Möbius parameter of the curve euklid[c[t]] in the Euclidean plane.";

FullSimplify[moebs[ncxx][t]]

For a circle the natural conformal parameter can’t be defined; we obtain

moebs[mgcurve[circle2D]][t]

MatrixRank[Table[D[mgcurve[circle2D][t],{t,i}],{i,0,3}]]

Points of a regular curve for which the corresponding rank is less 4 are named M-flat (or 2-flat). It can be shown that a curve all of its points are 2-flat is Möbius equivalent to a part of a circle, see [mdg] Proposition 3.1.3, p. 52. A curve is said to be generally curved (or of  type (Subscript[A, 2])), if none of its points are 2-flat. In the following we mostly assume that the considered curves are generally curved; 2-flat points must be excluded.

We aim to show that both definitions of the natural parameter s coincide.

Simplify[lambda[ncxx][t]^(-4)]

Simplify[(moebs[ncxx][t])^4]

FullSimplify[%-%%]

Remark. For lambda2D the corresponding identity isn’t true, in general:

FullSimplify[1/lambda2D[xy][t]-moebs[ncxx][t]]

If  t is the Euclidean arc length parameter we obtain the expected result:

FullSimplify[(1/lambda2D[xy][t])^4-moebs[ncxx][t]^4,css]

Summarizing we formulate 

Lemma 1.  For the normed representation ncxx[t] of a curve in the Möbius sphere the derivation of the natural Möbius parameter  s is given by Pick’s invariant. If t is the Euclidean arc length parameter of the curve xy[t]  with curvature k[t[t] formula

moebs[mgcurve][xy][t] == Sqrt[Abs[k'[t]]]== 1/lambda2D[xy][t]

is valid.

Proof  of the last statement.  For the Euclidean moving frame with the Euclidean arc length as parameter the following  definition is correct:

xy[t]

eu[1][t_] ={x'[t],y'[t]}; eu[2][t_] = {-y'[t],x'[t]};

Simplify[Table[eu[i][t].eu[j][t],{i,2},{j,2}],css]//MatrixForm

Simplify[Det[{eu[1][t],eu[2][t]}],css]

The Euclidean curvature  ( with sign) is obtained by

k[t_] := eu[1]'[t].eu[2][t]

k[t]

k'[t]

Simplify[moebs[mgcurve[xy]][t],css]

Simplify[1/lambda2D[xy][t],css]

FullSimplify[%^4-%%^4,css]

■ This expression  for the differential of the natural parameter is a special  case of formula 
(3.1.27), p.61. in [mdg].

We define yet another expression for the differential of the natural parameter

dSS::usage = "dSS[c][t] is the derivative of the natural conformal parameter of the plane curve without 2-flat points, with the isotropic representatives c[t] in isotropic-orthogonal coordinates. The 2-flat points yield singularities of dSS[cu][t].";

Clear[dSS,c];dSS[c_][t_] := Module[{xs,s,fgr,i,j},
If[Not[Length[c[t]]== 4],Print["Incorrect argument!"];Return[]];
 xs[s_]= transoi[].c[s];
fgr[s_] = Det[Table[pssp[D[xs[s],{s,i}],D[xs[s],{s,j}]],{i,0,3},{j,0,3}]];
Return[(Abs[fgr[t]]^(1/4))/pssp[D[xs[t],t],D[xs[t],t]]]]

To avoid the function Abs we define yet

Clear[dSS2,c];dSS2[c_][t_] := Module[{xs,s,fgr,i,j},
If[Not[Length[c[t]]== 4],Print["Incorrect argument!"];Return[]];
 xs[s_]= transoi[].c[s];
fgr[s_] = Det[Table[pssp[D[xs[s],{s,i}],D[xs[s],{s,j}]],{i,0,3},{j,0,3}]]^2;
Return[fgr[t]^(1/8)/pssp[D[xs[t],t],D[xs[t],t]]]]

FullSimplify[dSS[ncxx][t]^4]

FullSimplify[moebs[ncxx][t]^4]

We subtract the squares of both expressions

FullSimplify[((1/(((((x'[t])^2)+((y'[t])^2)))^4))(((((y'[t])^2) (3 x''[t] y''[t]-y'[t] Derivative[3][x][t])-((x'[t])^2) (3 x''[t] y''[t]+y'[t] Derivative[3][x][t])+((x'[t])^3) Derivative[3][y][t]+x'[t] y'[t] (3 ((x''[t])^2)-3 ((y''[t])^2)+y'[t] Derivative[3][y][t])))^2))^2-%^2]

OK.

FullSimplify[dSS2[ncxx][t]^4]

FullSimplify[moebs[ncxx][t]^4]

We subtract the squares of both expressions

FullSimplify[(√(1/(((((x'[t])^2)+((y'[t])^2)))^8)(((((y'[t])^2) (3 x''[t] y''[t]-y'[t] Derivative[3][x][t])-((x'[t])^2) (3 x''[t] y''[t]+y'[t] Derivative[3][x][t])+((x'[t])^3) Derivative[3][y][t]+x'[t] y'[t] (3 ((x''[t])^2)-3 ((y''[t])^2)+y'[t] Derivative[3][y][t])))^4)))^2-%^2]

and conclude
Lemma 2. For a normed isotropic representative of a regular curve in the Möbius plane the differential of the canonical Möbius parameter satisfies

moebs[ncxx][t] == dSS[ncxx][t]== dSS2[ncxx][t]

■

For  2-flat points, thus for all points of a circle, one has

dSS[mgcurve[circle2D]][t]

moebs[mgcurve[circle2D]][t]

3.2.6 The Next Reduction Step

We consider a normed representation ncxx[t]  of a generally curved curve in the Möbius sphere

ncxx[t]

satisfying the assumptions

FullSimplify[ASSU[ncxx][t]]

The coordinates are assumed to be isotropic orthogonal.  The frame and the derivation equations considered in subsection 3.2.2 above depend on the choice of the parameter t.  To get rid of this arbitrariness we introduce the natural Möbius parameter s, obtained integrating ds = moeb[ncxx][t]dt.  Often this integration can’t  be expressed  explicitly using elementary functions;  also the solution of the problem to find the parameter transformation t = t[s] as the inverse function of the integral s = s[t] often  can’t be solved explicitly by well known functions.  Fortunately, this needs not to be done; we think t= t[s] to be inserted and regard the rule (for arbitrary functions or vectors v depending on t)

D[v[t[s]], s] ==t'[s] v'[t[s]]

what expressed in the parameter t leads to

D[v[t[s]], s] == v'[t]*lambda[t]/. t-> t[s]

We introduce the natural parameter s transforming t =t[s] in the the moving frame of  second order defined in 3.2.2.  To have again a normed representation of the curve we renormalize the isotropic representative. This leads to the frame

Clear[fre];fre[0][c_][t_] :=  mfre[0][c][t]*moebs[c][t]

fre[1][c_][t_] :=  mfre[1][c][t]

fre[2][c_][t_] :=  mfre[2][c][t]

fre[3][c_][t_] :=  mfre[3][c][t]/moebs[c][t]

Table[Simplify[fre[i][ncxx][t].io[].fre[j][ncxx][t]],{i,0,3}, {j,0,3}]

moebs[ncxx][t]

lambda[ncxx][t]

Thus the frame is isotropic-orthonormal and  positively oriented:

Simplify[Det[Table[fre[i][ncxx][t],{i,0,3}]]]

Remember the relation

FullSimplify[ moebs[ncxx][t]==1/  lambda[ncxx][t]]

Considering a regular curve in the Euclidean plane with the arc length parameter t one obtains (clearly, as a special case)

Simplify[Table[fre[i][mgcurve[xy]][t].io[].fre[j][mgcurve[xy]][t],{i,0,3}, {j,0,3}],css]

For such a curve the factor  lambda is

FullSimplify[lambda2D[xy][t],css]

Clearly,, compare (3.1.23-27) pp. 58 in [mdg],  the radicand is positive for generally curved curves (curves of type (Subscript[A, 2])); indeed, in Subsection 3.2.5, Lemma 1,  we proved

lambda2D[xy][t] == 1/Sqrt[Abs[k'[t]]]

where k[t] denotes the Euclidean curvature of the curve and t its arclength.

Now we calculate the corresponding derivation equations. Since we have to consider the derivation with respect to the natural Möbius parameter s, we regard dt/ds = lambda[ncxx][t]

Simplify[D[fre[0][ncxx][t],t]*lambda[ncxx][t]-fre[1][ncxx][t]+fre[0][ncxx][t]*D[lambda[ncxx][t],t]]

This is the first derivation equation,  schematically:

d(fre[0])/ds=d(fre[0])/dt*lambda(t)= -fre[0]*d(lambda(t))/dt +fre[1]		(1)

The essentially new coefficient is

FullSimplify[-iosp[D[fre[0][ncxx][t],t]*lambda[ncxx][t],fre[3][ncxx][t]]]

Timing[FullSimplify[% + D[lambda[ncxx][t],t],TimeConstraint->Infinity]]

Mathematica 11.3 aborted after more than 100 min without result.
Mathematica v. 8.0.1 , result: {0.494348,0}. 
Mathematica v.12.0:Result {0.728055,0}

a00[t_] := -D[lambda[ncxx][t],t]

FullSimplify[a00[t]]

Simplify[D[fre[1][ncxx][t],t]*lambda[ncxx][t]-fre[3][ncxx][t]-fre[0][ncxx][t]*(lambda[ncxx][t])^2*w01[ncxx][t]]

Thuis the second derivation equation is

d(fre[1])/ds=d(fre[1])/dt*lambda(t)=fre[0]*(lambda(t))^2*w01 +fre[3]			(2)

Simplify[D[fre[2][ncxx][t],t]*(lambda[ncxx][t])-fre[0][ncxx][t]*(lambda[ncxx][t])^2*w02[ncxx][t]]

We consider

FullSimplify[(lambda[ncxx][t])^2*w02[ncxx][t],TimeConstraint -> Infinity]

and this equals  ±1, since  the differences of the squares of numerator and denominator is zero:

FullSimplify[(((y'[t])^2) (-3 x''[t] y''[t]+y'[t] Derivative[3][x][t])+((x'[t])^2) (3 x''[t] y''[t]+y'[t] Derivative[3][x][t])-((x'[t])^3) Derivative[3][y][t]-x'[t] y'[t] (3 ((x''[t])^2)-3 ((y''[t])^2)+y'[t] Derivative[3][y][t]))^2 -((((((x'[t])^2)+((y'[t])^2)))^2) √(1/(((((x'[t])^2)+((y'[t])^2)))^4)(((((y'[t])^2) (3 x''[t] y''[t]-y'[t] Derivative[3][x][t])-((x'[t])^2) (3 x''[t] y''[t]+y'[t] Derivative[3][x][t])+((x'[t])^3) Derivative[3][y][t]+x'[t] y'[t] (3 ((x''[t])^2)-3 ((y''[t])^2)+y'[t] Derivative[3][y][t])))^2)))^2,TimeConstraint -> Infinity]

Thus, with ϵ = ±1  the third  derivation equation is

d(fre[2])/ds=d(fre[2])/dt*lambda(t)=fre[0]*ϵ.			(3)

It remains to find an expression for the calculation of ϵ.   We define

epsilon[c_][t_] := (-D[cfre[2][c][t],t].io[].cfre[3][c][t])/moebs[c][t]

epsilon::usage ="epsilon[c][t] is the epsilon constant in the Frenet formulas of a generally curved plane curve with the normed isotropic representation c[t].";

FullSimplify[epsilon[ncxx][t]]

Control:

FullSimplify[%^2]

mgcurve[xy][t]

FullSimplify[(-D[cfre[2][mgcurve[xy]][t],t].io[].cfre[3][mgcurve[xy]][t])/moebs[mgcurve[xy]][t]]

This result leads to the following definition:

Clear[epsilon2D]; 
  epsilon2D[c_][s_] := 
   Module[{x, y, t, fe}, 
    x[t_] = c[t][[1]]; 
     y[t_] = c[t][[2]]; 
     fe[t_] = 
      ((Derivative[1][y][t])*
         Derivative[3][x][t] - 
        Derivative[1][x][t]*
         Derivative[3][y][t])/
       Sqrt[-(Derivative[2][x][t]^
            2 + Derivative[2][y][t]^
            2)^2 + Derivative[3][x][
           t]^2 + Derivative[3][y][
           t]^2]; fe[s]]

epsilon2D::usage ="epsilon2D[xy][t] is the epsilon constant in the Frenet formulas of a generally curved plane curve xy[t], t its Euclidean arclength.";

epsilon2D[xy][t]

FullSimplify[curvatures[xy][t][[1]],css]

FullSimplify[D[%,t]]

Thus it follows
Lemma 1. Let xy[t] be a curve of the Euclidean plane with arc length t and curvature kk[t]. Then the 2-flat points are the vertices, i.e. the points with kk’[t] = 0. Furthermore we have

epsilon2D[xy][t]== -Sign[kk'[t]].■

Remark.  In [BT] W. Blaschke, G. Thomsen, p.107, (55)the “Vorzeicheninvariante δ” ,  is defined as

δ[c_][t_] := Sign[Det[{c[t],c'[t],c''[t],c'''[t]}]]

for any vector function c[t] with values in the 4-dimensional real vector space.  One easily proves that this quantity is invariant under a parameter transformation. We show

FullSimplify[δ[ncxx][t] ,css]

FullSimplify[-y'[t] Derivative[3][x][t]+x'[t] Derivative[3][y][t]== D[curvatures[xy][t][[1]],t],css]

By the Lemma it follows
δ[ncxx][t] == -epsilon2D[xy][t]. ■

The last derivation equation is

Simplify[D[fre[3][ncxx][t],t]*lambda[ncxx][t]-fre[1][ncxx][t]*(lambda[ncxx][t])^2*w01[ncxx][t]-fre[2][ncxx][t]*(epsilon[ncxx][t])- fre[3][ncxx][t]*(D[lambda[ncxx][t],t])]

d(fre[3])/ds=d(fre[3])/dt*lambda(t)=fre[1]*(lambda(t))^2*w01 +fre[2]*ϵ +	fre[3]*d(lambda(t))/dt	(4)

Remark. In the case that t=s is the natural Möbius parameter, we have lambda(t)≡1 and d(lambda(t))/dt≡0. Then the derivation equations have the final form as seen in [mdg], example 3.2.2, p. 62, with k = w02.

3.2.7. The Last Reduction Step

Performing the last reduction step, see p. 62, formula (30) of [mdg], we obtain the canonical moving Frenet frame of a generally curved curve  in the Möbius plane defining with

a00[t] ==- D[lambda[ncxx][t],t]

cfre[0][c_][t_]:= fre[0][c][t]

cfre[1][c_][t_]:= -fre[0][c][t]*D[lambda[c][t],t] +fre[1][c][t]

cfre[2][c_][t_]:= fre[2][c][t]

cfre[3][c_][t_]:= fre[0][c][t]*((D[lambda[c][t],t]) ^2)/2 -fre[1][c][t]*D[lambda[c][t],t]+fre[3][c][t]

Simplify[Det[Table[cfre[i][ncxx][t],{i,0,3}]]]

Table[cfre[i][ncxx][t].io[].cfre[j][ncxx][t],{i,0,3},{j,0,3}];

Simplify[%]

The frame  cfre[i] is isotropic orthogonal and positively oriented.

Now we calculate the derivation equations. We show

Simplify[D[cfre[0][ncxx][t],t]*lambda[ncxx][t]== cfre[1][ncxx][t]]

Timing[Simplify[(D[cfre[1][ncxx][t],t]*lambda[ncxx][t]).io[].cfre[0][ncxx][t],TimeConstraint->Infinity]]

Mathematica 8.0.1  result: {28.6318,-1}.
Mathematica v. 11.3,  result: {120.349,-1}
Mathematica v. 12.0,  result: {180.985,-1}

Timing[Simplify[(D[cfre[1][ncxx][t],t]*lambda[ncxx][t]).io[].cfre[1][ncxx][t],TimeConstraint->Infinity]]

Mathematica 8.0.1  result: {168.048, 0}
Mathematica v. 11.3: Kernel exited.
Mathematica 12.0  result: {804.688,0}

Timing[Simplify[(D[cfre[1][ncxx][t],t]*lambda[ncxx][t]).io[].cfre[2][ncxx][t],TimeConstraint->Infinity]]

Mathematica 8.0.1  result: {29.7444, 0}
Mathematica v. 113: Kernel exited. Windows 10: {368.847, 0}
Mathematica 12.0  result: {242.916,0}

The remaining scalar product, the component at cfre[0], yields the conformal curvature

mcurvature::usage:= "mcurvature[repr][t] is the first Moebius invariant curvature of the curve isotropically represented by the normed representation repr[t].";

mcurvature[c_][t_] :=-lambda[c][t]*(D[cfre[1][c][t],t].io[].cfre[3][c][t])

Timing[FullSimplify[mcurvature[ncxx][t],TimeConstraint->Infinity] ]

Mathematica 11.3 needed 1085.32 s, v. 8.0.1.  only 425.257 s.

Using this result  we define this curvature of a plane curve xy[t], t its arclength, to be

mcurvature2D::usage:= "mcurvature2D[curve][t] is the Moebius invariant curvature of the Euclidean plane curve curve[t], t its Euclidean arc lengthparameter.";

Clear[cu,x,y,t];mcurvature2D[cu_][t_] := 
  Module[{x, y,s}, x[s_] = cu[s][[1]]; 
    y[s_] = cu[s][[2]]; 
    (((y'[t])^6) (-45 (((x''[t])^6)+6 ((x''[t])^4) ((y''[t])^2)-3 ((x''[t])^2) ((y''[t])^4))-60 y'[t] x''[t] (y''[t] (-5 ((x''[t])^2)+((y''[t])^2)) Derivative[3][x][t]+2 x''[t] (((x''[t])^2)+((y''[t])^2)) Derivative[3][y][t])+10 ((y'[t])^2) x''[t] (3 ((x''[t])^2) Derivative[4][x][t]-3 y''[t] (-4 Derivative[3][x][t] Derivative[3][y][t]+y''[t] Derivative[4][x][t])+x''[t] (-8 (((Derivative[3][x][t])^2)+((Derivative[3][y][t])^2))+6 y''[t] Derivative[4][y][t]))+((y'[t])^4) (-5 ((Derivative[4][x][t])^2)+4 Derivative[3][x][t] Derivative[5][x][t])-4 ((y'[t])^3) (10 ((Derivative[3][x][t])^2) Derivative[3][y][t]+Derivative[3][x][t] (-5 y''[t] Derivative[4][x][t]+5 x''[t] Derivative[4][y][t])+x''[t] (-10 Derivative[3][y][t] Derivative[4][x][t]+3 y''[t] Derivative[5][x][t])))+((x'[t])^10) (-5 ((Derivative[4][y][t])^2)+4 Derivative[3][y][t] Derivative[5][y][t])-2 ((x'[t])^9) (-5 (2 x''[t] Derivative[3][y][t]+y'[t] Derivative[4][x][t]) Derivative[4][y][t]+2 y'[t] Derivative[3][y][t] Derivative[5][x][t]+2 Derivative[3][x][t] (10 ((Derivative[3][y][t])^2)-10 y''[t] Derivative[4][y][t]+y'[t] Derivative[5][y][t])+2 y''[t] (5 Derivative[3][y][t] Derivative[4][x][t]+3 x''[t] Derivative[5][y][t]))+((x'[t])^2) ((y'[t])^4) (-270 ((x''[t])^6)+135 ((y''[t])^6)-180 y'[t] ((y''[t])^4) Derivative[3][y][t]+135 ((x''[t])^4) (17 ((y''[t])^2)-4 y'[t] Derivative[3][y][t])+90 y'[t] ((x''[t])^3) (-6 y''[t] Derivative[3][x][t]+y'[t] Derivative[4][x][t])+30 ((y'[t])^2) ((y''[t])^3) Derivative[4][y][t]+40 ((y'[t])^3) y''[t] (Derivative[3][x][t] Derivative[4][x][t]+Derivative[3][y][t] Derivative[4][y][t])-6 y'[t] x''[t] (-210 ((y''[t])^3) Derivative[3][x][t]+5 y'[t] ((y''[t])^2) Derivative[4][x][t]+20 ((y'[t])^2) (-Derivative[3][y][t] Derivative[4][x][t]+Derivative[3][x][t] Derivative[4][y][t])+4 ((y'[t])^2) y''[t] Derivative[5][x][t])-4 ((y'[t])^2) ((y''[t])^2) (50 ((Derivative[3][x][t])^2)-10 ((Derivative[3][y][t])^2)+3 y'[t] Derivative[5][y][t])+6 ((x''[t])^2) (5 (-90 ((y''[t])^4)+24 y'[t] ((y''[t])^2) Derivative[3][y][t]-4 ((y'[t])^2) (((Derivative[3][x][t])^2)+3 ((Derivative[3][y][t])^2))+5 ((y'[t])^2) y''[t] Derivative[4][y][t])+2 ((y'[t])^3) Derivative[5][y][t])+((y'[t])^3) (-40 ((Derivative[3][x][t])^2) Derivative[3][y][t]-5 (8 ((Derivative[3][y][t])^3)+y'[t] (4 ((Derivative[4][x][t])^2)+((Derivative[4][y][t])^2)))+16 y'[t] Derivative[3][x][t] Derivative[5][x][t]+4 y'[t] Derivative[3][y][t] Derivative[5][y][t]))+((x'[t])^8) (30 ((y''[t])^3) Derivative[4][y][t]+2 y''[t] (-15 ((x''[t])^2) Derivative[4][y][t]-10 y'[t] (Derivative[3][x][t] Derivative[4][x][t]-2 Derivative[3][y][t] Derivative[4][y][t])+6 x''[t] (10 Derivative[3][x][t] Derivative[3][y][t]+y'[t] Derivative[5][x][t]))-4 ((y''[t])^2) (20 ((Derivative[3][x][t])^2)+20 ((Derivative[3][y][t])^2)-15 x''[t] Derivative[4][x][t]+3 y'[t] Derivative[5][y][t])+y'[t] (80 ((Derivative[3][x][t])^2) Derivative[3][y][t]-5 (8 ((Derivative[3][y][t])^3)+y'[t] (((Derivative[4][x][t])^2)+4 ((Derivative[4][y][t])^2)))+Derivative[3][x][t] (-60 x''[t] Derivative[4][y][t]+4 y'[t] Derivative[5][x][t])+4 (3 ((x''[t])^2)+4 y'[t] Derivative[3][y][t]) Derivative[5][y][t]))+((x'[t])^6) (-45 ((y''[t])^6)+180 y'[t] ((y''[t])^4) Derivative[3][y][t]+15 ((x''[t])^4) (9 ((y''[t])^2)+4 y'[t] Derivative[3][y][t])+30 y'[t] ((x''[t])^3) (10 y''[t] Derivative[3][x][t]+y'[t] Derivative[4][x][t])+90 ((y'[t])^2) ((y''[t])^3) Derivative[4][y][t]-40 ((y'[t])^3) y''[t] (Derivative[3][x][t] Derivative[4][x][t]-3 Derivative[3][y][t] Derivative[4][y][t])+2 y'[t] x''[t] (-30 ((y''[t])^3) Derivative[3][x][t]+75 y'[t] ((y''[t])^2) Derivative[4][x][t]+20 ((y'[t])^2) (Derivative[3][y][t] Derivative[4][x][t]-5 Derivative[3][x][t] Derivative[4][y][t])+12 ((y'[t])^2) y''[t] Derivative[5][x][t])-12 ((y'[t])^2) ((y''[t])^2) (30 ((Derivative[3][x][t])^2)+10 ((Derivative[3][y][t])^2)+3 y'[t] Derivative[5][y][t])+2 ((y'[t])^3) (100 ((Derivative[3][x][t])^2) Derivative[3][y][t]-60 ((Derivative[3][y][t])^3)-5 y'[t] (2 ((Derivative[4][x][t])^2)+3 ((Derivative[4][y][t])^2))+8 y'[t] Derivative[3][x][t] Derivative[5][x][t]+12 y'[t] Derivative[3][y][t] Derivative[5][y][t])-2 ((x''[t])^2) (135 ((y''[t])^4)+600 y'[t] ((y''[t])^2) Derivative[3][y][t]+15 ((y'[t])^2) y''[t] Derivative[4][y][t]-2 ((y'[t])^2) (10 ((Derivative[3][x][t])^2)-50 ((Derivative[3][y][t])^2)+9 y'[t] Derivative[5][y][t])))-2 ((x'[t])^7) (60 ((y''[t])^4) Derivative[3][x][t]-15 y'[t] ((y''[t])^3) Derivative[4][x][t]+15 ((x''[t])^3) (2 y''[t] Derivative[3][y][t]-y'[t] Derivative[4][y][t])+60 ((y'[t])^2) y''[t] (Derivative[3][y][t] Derivative[4][x][t]-Derivative[3][x][t] Derivative[4][y][t])-6 y'[t] ((y''[t])^2) (10 Derivative[3][x][t] Derivative[3][y][t]+y'[t] Derivative[5][x][t])+((x''[t])^2) (60 ((y''[t])^2) Derivative[3][x][t]+45 y'[t] y''[t] Derivative[4][x][t]+6 y'[t] (10 Derivative[3][x][t] Derivative[3][y][t]+y'[t] Derivative[5][x][t]))+4 ((y'[t])^2) (5 ((Derivative[3][x][t])^3)+y'[t] (-5 Derivative[4][x][t] Derivative[4][y][t]+2 Derivative[3][y][t] Derivative[5][x][t])+Derivative[3][x][t] (5 ((Derivative[3][y][t])^2)+2 y'[t] Derivative[5][y][t]))+x''[t] (-150 ((y''[t])^3) Derivative[3][y][t]+5 y'[t] y''[t] (-4 (((Derivative[3][x][t])^2)+7 ((Derivative[3][y][t])^2))+9 y''[t] Derivative[4][y][t])-4 ((y'[t])^2) (5 Derivative[3][x][t] Derivative[4][x][t]+5 Derivative[3][y][t] Derivative[4][y][t]-3 y''[t] Derivative[5][y][t])))+((x'[t])^4) ((y'[t])^2) (135 ((x''[t])^6)-180 ((x''[t])^4) (15 ((y''[t])^2)+2 y'[t] Derivative[3][y][t])+90 y'[t] ((x''[t])^3) (-6 y''[t] Derivative[3][x][t]+y'[t] Derivative[4][x][t])-30 y'[t] x''[t] (-42 ((y''[t])^3) Derivative[3][x][t]+8 y'[t] y''[t] Derivative[3][x][t] Derivative[3][y][t]-3 y'[t] ((y''[t])^2) Derivative[4][x][t]-4 ((y'[t])^2) (Derivative[3][y][t] Derivative[4][x][t]-2 Derivative[3][x][t] Derivative[4][y][t]))+3 ((x''[t])^2) (765 ((y''[t])^4)-120 y'[t] ((y''[t])^2) Derivative[3][y][t]+30 ((y'[t])^2) y''[t] Derivative[4][y][t]+4 ((y'[t])^2) (-40 ((Derivative[3][y][t])^2)+3 y'[t] Derivative[5][y][t]))+2 (-135 ((y''[t])^6)+45 ((y'[t])^2) ((y''[t])^3) Derivative[4][y][t]+60 ((y'[t])^3) y''[t] Derivative[3][y][t] Derivative[4][y][t]-6 ((y'[t])^2) ((y''[t])^2) (40 ((Derivative[3][x][t])^2)+3 y'[t] Derivative[5][y][t])+((y'[t])^3) (60 ((Derivative[3][x][t])^2) Derivative[3][y][t]-60 ((Derivative[3][y][t])^3)-5 y'[t] (3 ((Derivative[4][x][t])^2)+2 ((Derivative[4][y][t])^2))+12 y'[t] Derivative[3][x][t] Derivative[5][x][t]+8 y'[t] Derivative[3][y][t] Derivative[5][y][t])))-6 ((x'[t])^5) y'[t] (45 ((x''[t])^5) y''[t]+30 y'[t] ((x''[t])^4) Derivative[3][x][t]-15 ((x''[t])^3) (18 ((y''[t])^3)+14 y'[t] y''[t] Derivative[3][y][t]+((y'[t])^2) Derivative[4][y][t])+5 x''[t] (9 ((y''[t])^5)+18 y'[t] ((y''[t])^3) Derivative[3][y][t]-4 ((y'[t])^2) y''[t] (3 ((Derivative[3][x][t])^2)+5 ((Derivative[3][y][t])^2))-4 ((y'[t])^3) Derivative[3][x][t] Derivative[4][x][t]+9 ((y'[t])^2) ((y''[t])^2) Derivative[4][y][t])+y'[t] ((x''[t])^2) (-120 ((y''[t])^2) Derivative[3][x][t]+20 y'[t] Derivative[3][x][t] Derivative[3][y][t]+45 y'[t] y''[t] Derivative[4][x][t]+6 ((y'[t])^2) Derivative[5][x][t])+y'[t] (90 ((y''[t])^4) Derivative[3][x][t]-15 y'[t] ((y''[t])^3) Derivative[4][x][t]+20 ((y'[t])^2) y''[t] (2 Derivative[3][y][t] Derivative[4][x][t]-Derivative[3][x][t] Derivative[4][y][t])-2 y'[t] ((y''[t])^2) (10 Derivative[3][x][t] Derivative[3][y][t]+3 y'[t] Derivative[5][x][t])+2 ((y'[t])^2) (10 ((Derivative[3][x][t])^3)+y'[t] (-5 Derivative[4][x][t] Derivative[4][y][t]+2 Derivative[3][y][t] Derivative[5][x][t])+2 Derivative[3][x][t] (-5 ((Derivative[3][y][t])^2)+y'[t] Derivative[5][y][t]))))-2 x'[t] ((y'[t])^5) (135 ((x''[t])^5) y''[t]-90 y'[t] ((x''[t])^4) Derivative[3][x][t]-15 ((x''[t])^3) (54 ((y''[t])^3)-2 y'[t] y''[t] Derivative[3][y][t]+((y'[t])^2) Derivative[4][y][t])+3 y'[t] ((x''[t])^2) (200 ((y''[t])^2) Derivative[3][x][t]+15 y'[t] y''[t] Derivative[4][x][t]+2 y'[t] (-10 Derivative[3][x][t] Derivative[3][y][t]+y'[t] Derivative[5][x][t]))+x''[t] (135 ((y''[t])^5)-150 y'[t] ((y''[t])^3) Derivative[3][y][t]+45 ((y'[t])^2) ((y''[t])^2) Derivative[4][y][t]+10 ((y'[t])^3) (-2 Derivative[3][x][t] Derivative[4][x][t]+Derivative[3][y][t] Derivative[4][y][t])-2 ((y'[t])^2) y''[t] (70 ((Derivative[3][x][t])^2)+10 ((Derivative[3][y][t])^2)+3 y'[t] Derivative[5][y][t]))+y'[t] (-30 ((y''[t])^4) Derivative[3][x][t]-15 y'[t] ((y''[t])^3) Derivative[4][x][t]+30 ((y'[t])^2) y''[t] Derivative[3][y][t] Derivative[4][x][t]-6 y'[t] ((y''[t])^2) (-10 Derivative[3][x][t] Derivative[3][y][t]+y'[t] Derivative[5][x][t])+((y'[t])^2) (20 ((Derivative[3][x][t])^3)+y'[t] (-5 Derivative[4][x][t] Derivative[4][y][t]+2 Derivative[3][y][t] Derivative[5][x][t])+Derivative[3][x][t] (-40 ((Derivative[3][y][t])^2)+2 y'[t] Derivative[5][y][t]))))-2 ((x'[t])^3) ((y'[t])^3) (-810 ((x''[t])^5) y''[t]-45 ((x''[t])^3) (-44 ((y''[t])^3)+14 y'[t] y''[t] Derivative[3][y][t]+((y'[t])^2) Derivative[4][y][t])+3 y'[t] ((x''[t])^2) (60 ((y''[t])^2) Derivative[3][x][t]-20 y'[t] Derivative[3][x][t] Derivative[3][y][t]+45 y'[t] y''[t] Derivative[4][x][t]+6 ((y'[t])^2) Derivative[5][x][t])-x''[t] (810 ((y''[t])^5)-270 y'[t] ((y''[t])^3) Derivative[3][y][t]-135 ((y'[t])^2) ((y''[t])^2) Derivative[4][y][t]+20 ((y'[t])^3) (3 Derivative[3][x][t] Derivative[4][x][t]-Derivative[3][y][t] Derivative[4][y][t])+12 ((y'[t])^2) y''[t] (25 ((Derivative[3][x][t])^2)+15 ((Derivative[3][y][t])^2)+y'[t] Derivative[5][y][t]))+y'[t] (180 ((y''[t])^4) Derivative[3][x][t]-45 y'[t] ((y''[t])^3) Derivative[4][x][t]+20 ((y'[t])^2) y''[t] (5 Derivative[3][y][t] Derivative[4][x][t]-Derivative[3][x][t] Derivative[4][y][t])+6 y'[t] ((y''[t])^2) (10 Derivative[3][x][t] Derivative[3][y][t]-3 y'[t] Derivative[5][x][t])+4 ((y'[t])^2) (15 ((Derivative[3][x][t])^3)+y'[t] (-5 Derivative[4][x][t] Derivative[4][y][t]+2 Derivative[3][y][t] Derivative[5][x][t])+Derivative[3][x][t] (-25 ((Derivative[3][y][t])^2)+2 y'[t] Derivative[5][y][t])))))/(8 (((((x'[t])^2)+((y'[t])^2)))^6) (((1/(((((x'[t])^2)+((y'[t])^2)))^4)(((((y'[t])^2) (3 x''[t] y''[t]-y'[t] Derivative[3][x][t])-((x'[t])^2) (3 x''[t] y''[t]+y'[t] Derivative[3][x][t])+((x'[t])^3) Derivative[3][y][t]+x'[t] y'[t] (3 ((x''[t])^2)-3 ((y''[t])^2)+y'[t] Derivative[3][y][t])))^2)))^(3/2)))]

Control:

Timing[FullSimplify[mcurvature[ncxx][t]-mcurvature2D[xy][t],css,TimeConstraint-> Infinity]]

Mathematica v. 8.0.1: result: {159.786,0}
V. 11.3. Kernel exited.

Timing[Simplify[(D[cfre[1][ncxx][t],t]*lambda[ncxx][t])-cfre[0][ncxx][t]*mcurvature[ncxx][t]- cfre[3][ncxx][t],TimeConstraint->Infinity]]

Ok. Mathematica 8,0,1, result {1479.5,{0,0,0,0}}.
V. 11.3. Kernel exited; under Windows 10: result {4813.31, {0,0,0,0}}.

Timing[Simplify[(D[cfre[2][ncxx][t],t]*lambda[ncxx][t])-cfre[0][ncxx][t]*epsilon[ncxx][t],TimeConstraint->Infinity]]

Mathematica 8.0.1 needed 45.1426 s, v. 11.3 needed 203.901 s.
Thus we proved

d(cfre[2])/ds=d(cfre[2])/dt*lambda(t)=cfre[0]*ϵ			(3)

From the definition we have cfre[0] == fre[0]. Similarly, using the next equation:

d(fre[3])/ds=d(fre[3])/dt*lambda(t)=fre[1]*(lambda(t))^2*w01 +fre[2]*ϵ +	fre[3]*d(lambda(t))/dt		(4)

or by symmetry following from the isotropic-orthogonality of the frame, one calculates

Timing[FullSimplify[D[cfre[3][ncxx][t],t]*lambda[ncxx][t] - cfre[1][ncxx][t]*mcurvature[ncxx][t]-cfre[2][ncxx][t]*epsilon[ncxx][t],TimeConstraint->Infinity]]

The result.  {2188.85,{0,0,0,0}}, obtained with Mathematica v. 8.0.1.
Mathematica 11.3: Kernel exited .

In the next important case the statement has been confirmed:

Timing[FullSimplify[D[cfre[3][ncxx][t],t]*lambda[ncxx][t] - cfre[1][ncxx][t]*mcurvature2D[xy][t]-cfre[2][ncxx][t]*epsilon[ncxx][t],css,TimeConstraint->Infinity]]

Mathematica 11.3, result: {334.419,{0,0,0,0}}. Summarizing we formulate

Theorem.  Let be given a regular plane curve without 2-flat points

xy[t]

or a normed isotropic representation of a curve in the Möbius sphere

ncxx[t]

satisfying the relations

ASSU[ncxx][t]

respectively

css

Then the integral of

ds/dt = 1/lambda2D[xy][t] or ds/dt = 1/lambda[ncxx][t]

is the  natural conformal parameter s[t] defined up to an additive constant. If t is the Euclidean arc length of the curve the function lambda2D[xy][t] is given by

lambda2D[xy][t]

The isotropic orthogonal moving frame cfre[i][ncxx][t],  i = 0,...3,  defined above is the Frenet frame of  3-rd order of the curve.  As a function of  the natural parameter s = s{t]

D[ cfre[i][t[s]],t] dt/ds ==  D[ cfre[i][t[s]],t]lambda[t[s]]

t(s) the inverse function of s = s[t], it satisfies the  Frenet formulas ( or derivation equations)

cfre[0]'[s] == cfre[1][s]
cfre[1]'[s] == cfre[0][s]cfk[s] + cfre[3][s]
cfre[2]'[s]== cfre[0][s]ϵ
cfre[3]'[s]== cfre[1][s]cfk[s] +  cfre[2][s]ϵ

Here

cfk[s]= mcurvature[ncxx][t[s]]

denotes the Möbius invariant conformal curvature and ϵ = ± 1 where

ϵ=epsilon[ncxx][t], or

epsilon2D[xy][t]

as defined above. ■

For the proof see the calculations for cfre[i][t] above, and Example 3.1.2 , p. 62, of [mdg].

Proposition.  The vector cfre[2][mgcurve[xy]][s ] defines the osculating circle of the curve at he point xy[t].
Proof. The pseudo-Euclidean subspace defining the osculating circle is spanned by

cfre[0][mgcurve[xy]][s]; D[cfre[0[mgcurve[xy]]][s],s] ==cfre[1][mgcurve[xy]][s]

and

D[cfre[0][mgcurve[xy]][s],{s,2}] ==D[cfre[1][mgcurve[xy]][s],s]
== cfre[0][mgcurve[xy]][s]*cfk[s] + cfre[1][s]+cfre[3][mgcurve[xy]][t]*C

Clearly the osculating subspace (Subscript[B, 2])[t] spanned by these vectors has the normal vector cfre[2][xy]][t]. ■

3.3.. A Curvature Formula

Let fk[s] be the natural equation of a curve in the Euclidean plane, that is its curvature  expressed as a function of its arclength.  In  this Section  we give a formula expressing the Möbius invariant conformal curvature as a function of fk[s] and its derivatives. In the remaining  sections we calculate the conformal curvature of two curves by this formula and by the Modules developed in Chapter 3 thus confirming the formula.

The following formula has been used already in the notebook loxodromes.nb. We complete it here adding the factor

-Sign[fk'[s]]

Clear[cfcurvature,fk];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)]

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

FullSimplify[curvature[xy][t],css]

FullSimplify[curvature[xy][t],((x'[t])^2)+((y'[t])^2)==1]

FullSimplify[curvatures[xy][t][[1]],((x'[t])^2)+((y'[t])^2)==1]

css

fk[s_] := (-Derivative[1][y][s])*
    Derivative[2][x][s] + 
   Derivative[1][x][s]*
    Derivative[2][y][s]

fk[s]

Simplify[cfcurvature[fk][t],css]

cffk[t_] = %;

Timing[FullSimplify[(cffk[t])^2-(mcurvature2D[xy][t])^2,css,TimeConstraint-> Infinity]]

Aborted after waiting more than 100 minutes. The next Output shows the complexity of the considered function. The properties of xy coded in the assumptions css don’t suffice to finish the above simplification successfully. The examples in  Section 4 confirm the formula.

FullSimplify[mcurvature2D[xy][t],css]

4. Examples

4.1. Example. The Parabola

In this subsection we consider a parabola and find its natural parameter and its Möbius curvature. Furthermore we define anticurves, osculating circles and normal vectors for generally curved plane curves and test these concepts with the considered parabola.

4.1.1. Curvatures and Natural Parameters, epsilon2D

We consider the parabola

Clear[p,t,ss,ff,parabel];parabel[p_][t_] :={t,p*t^2}

D[parabel[p][t],t]

The Euclidean arc length parameter is

Integrate[Sqrt[1+4(p*t)^2],t]

We set $Assumptions:

$Assumptions

$Assumptions= (p>0)&&$Assumptions

parss[p_][t_] :=(1/2) t (Sqrt[1+4 (p^2) (t^2)])+((ArcSinh[2 p t])/(4 p))

Considering the inverse function

parff[p_][s_] :=InverseFunction[parss[p]][s]

parff[1/2][s]

FullSimplify[InverseFunction[parss[(1/2)]][s],{p>0,s>0}]

The function isn’t expressed by elementary functions, but it can be plotted:

Plot[parff[1/2][s]/.p->1/2,{s,-2,2}]

We define the parabola as a function of its arc length, changing the notation 
s -> t

Clear[par];par[p_][t_] := {parff[p][t],p*parff[p][t]^2}

Here is the vertex of the parabola:

par[p][0]

Simplify[D[par[p][t],t]]

Indeed, t is the arc length:

Simplify[%.%]

Here is a picture of a parabola:

ParametricPlot[par[1/2][t],{t,-3,3}]

parpic = %;

The Euclidean curvature of the parabola is

park[p_][t_] := Simplify[curvatures[par[p]][t][[1]]]

park[p][t]

dpark[p_][t_] := Simplify[D[park[p][u],u]/.u-> t]

Plot[dpark[1/2][t],{t,-2,2}]

Plot[Sign[dpark[1/2][t]],{t,-2,2}]

We calculate the epsilon constant of the parabola :

FullSimplify[epsilon2D[par[p]][t],t>0]

Plot[%/.p-> 1/2,{t,-2,2}]

This is the same as the graph of -Sign[dpark[1/2][t] plotted above, what confirms the formula

epsilon2D[xy[t] == - Sign[k'[t]]

proved in  Lemma 1,  subsection 3.2.6.

mgcurve[par[p]][t]

euklid[%]

Simplify[lambda[mgcurve[par[p]]][t]]

?lambda2D

Simplify[lambda2D[par[p]][t]]

The next result is a special case of formula (3.1.27),p.61 of [mdg]:

FullSimplify[Together[%^(-4) - dpark[p][t]^2]]

The natural Möbius parameter is

Integrate[1/Simplify[lambda2D[par[p]]][t],t]

natpar[p_][t_]  = Simplify[%]

Plot[natpar[1/2][t], {t,-2,2}]

Limit[natpar[1/2][t], t-> Infinity]

npf[u_] = natpar[1/2][t]/.InverseFunction[parss[(1/2)]][t]-> u

Limit[npf[u], u-> Infinity]

Limit[npf[u], u-> -Infinity]

Thus we got the surprising result: The total conformal length of the parabola with parameter p=1/2 is Sqrt[6]*Pi ; this value is the same for all parameters p (test it!).

The vertex is a singularity for epsilon and for the conformsl curvature (see below)

epsilon2D[par[p]][0]

mgcurve[par[p]][t]

Simplify[%.io[].%,t>0]

Simplify[cfre[0][mgcurve[par[p]]][t]]

mgpar[p_][t_] = %;

Simplify[par[p][t] - euklid[mgpar[p][t]]]

Simplify[cfre[1][mgcurve[par[p]]][t],t>0]

Simplify[%.io[].%,t>0]

Simplify[cfre[3][mgcurve[par[p]]][t],t>0]

Simplify[%.io[].%,t>0]

The Möbius curvature of the parabola is

Simplify[mcurvature[mgcurve[par[p]]][t]]

mgk[p_][t_] = %;

Simplify[mcurvature2D[par[p]][t]]

ftest[t_] =Simplify[%-%%]

Thus, as expected, both definitions of the conformal curvature give the same value.

Plot[Evaluate[mcurvature[mgcurve[par[1/2]]][t]],{t,-3,3}]

mcurvature2D[par[p]][0]

FullSimplify[Table[cfre[i][mgcurve[par[p]]][t].io[].cfre[j][mgcurve[par[p]]][t],{i,0,3},{j,0,3}]]

Now we will confirm the general curvature formula (see Subsection 3.3) for the parabolas.

par[p][t]

We calculated the Euclidean curvature

park[p][t]

The Möbius curvature has been calculated as

mgk[p][t]

We insert the Euclidean curvature into the general formula and obtain

Simplify[cfcurvature[park[p]][t]]

Comparison with the directly calculated Möbius curvature:

FullSimplify[%-mgk[p][t],t>0]

Mathematica can’t simplify but the result is zero for t ≠ 0:

Plot[Chop[Out[113]/.p->1/2], {t,-2,2}, PlotStyle -> {Red,Thick}]

t= 0 is the vertex in which the Möbius curvature isn’t defined:

mgk[p][0]

par[p][0]

4.1.2.Anticurves,  Anti-Parabola

?euklid

anticurve[c_][t_] := euklid[cfre[3][mgcurve[c]][t]]

anticurve::usage = "anticurve[c_][t_], t the Euclidean arc length parameter of the curve c[t], is the curve in the Euclidean space generated by the last isotropic vector of the Moebius invariant Frenet frame of c[t].";

Simplify[cfre[3][mgcurve[par[1/2]]][t]]

Clear[antipar];antipar[t_]=euklid[%]

antipar[t]

ParametricPlot[antipar[t],{t,-4,4}]

antigr= %;

ParametricPlot[parabel[.5][t],{t,-3,3}, PlotStyle -> {Thick, Red}]

pargr = %;

Show[{pargr,antigr},PlotRange ->All]

duogr = %;

The curve antipar has the same symmetry property like par

{-v,p*(-v)^2}== {v,p*v^2}*{-1,1}

{v,p*v^2}*{-1,1}

antipar[0]

FullSimplify[Together[antipar[-t] -antipar[t]*{-1,1}]]

Mathematica couldn’t find out that this is the zero vector, but it may plot it:

Plot[Chop[Simplify[%.%]],{t,-2,2}, PlotStyle -> {Thick,Red}]

pantipar[u_] = Simplify[antipar[t]//.InverseFunction[parss[(1/2)]][t]-> u]

Limit[pantipar[u],u-> Infinity]

Limit[pantipar[u],u-> -Infinity]

Simplify[pantipar[-u] == pantipar[u]*{-1,1}]

Again Mathematica doesn’t recognize that the next expression equals zero, but it plots that:

FullSimplify[Evaluate[parff[1/2][-t]+ parff[1/2][t]]]

Plot[Chop[Simplify[%]],{t,-2,2}, PlotStyle -> {Thick,Red}]

4.1.3 Osculating Circles

By Proposition 3.2.7 the osculating circle of a plane curve is defined by the frame vector cfre[2][mgcurve[c]][u]] of the plane curve c[t]. Using the built-in graphic object

?Circle

one obtains a picture of this circle by

Clear[t,c,oscirc2];oscirc2[c_][t_] := Module[{u, cr},
cr[u_] = Simplify[cfre[2][mgcurve[c]][u]];
Graphics[Circle[iocenter[cr[t]] ,Abs[ioradius[cr[t]]]]]]

Using the parameter representatation of a plane circle defined in the package eudiffgeo.m:

?circ2D

we obtain the osculating circle of a plane curve c[t] at the point t is defined by the frame vector

Clear[t,c,oscirc];oscirc[c_,opts___][t_] := Module[{u, dv,dvcr},
dv[u_,i_]:= D[mgcurve[c][u],{u,i}];
dvcr[u_] = Simplify[ioCross[dv[u,0],dv[u,1],dv[u,2]]];
ParametricPlot[circ2D[iocenter[dvcr[t]] ,Abs[ioradius[dvcr[t]]]][u ],{u,0,2*Pi},opts]]

par[t_ ]=parabel[1/2][t]

oscirc2[par][1]

oscirc[par][1]

Show[{%,%%}]

The point par[t]  lies on the osculating circle oscirc[par][t], not the point antipar[t].

duopic[t_] :=Show[{oscirc[par][t],duogr,Graphics[Point[par[t]]],Graphics[Point[antipar[t]]]},PlotRange -> {{-5,5},{-5,5}}]

duopic2[t_] :=Show[{oscirc2[par][t],duogr,Graphics[Point[par[t]]],Graphics[Point[antipar[t]]]},PlotRange -> {{-5,5},{-5,5}}]

duopic[-0.85]

duopic2[-0.85]

4.2. Example. The Ellipse

3.4.1. The Curvatures

We consider the ellipse depending on the parameter a

Clear[ellipse];ellipse[a_][t_] := {a*Cos[t],Sin[t]}

The Euclidean arc length parameter is

Integrate[Sqrt[(a*Sin[t])^2+(Cos[t])^2],t]

Clear[a,t];ellss[a_][t_]=%;

Considering the inverse function in the case

Clear[a];ellff[a_][s_] :=InverseFunction[ellss[a]][s]

ellff[a][s]

we define the ellipse as a function of its arclength, changing the notation

Clear[ell];ell[a_][s_] := {a*Cos[ellff[a][s]],Sin[ellff[a][s]]}

Plot[Evaluate[ellff[2][s]], {s,0,30}]

We will find the period so: The perimeter of the ellipse (a->2):

so=ellss[2][2*Pi]

N[so]

ellff[2][so]

ell[2][so]

ParametricPlot[ellipse[2][t],{t,0,2*Pi},PlotStyle -> {Red,Thick}]

grellip = %;

Here is a vertex of the ellipse:

ellipse[a][Pi/2]

{0,1}

or

ell[2][so/4]

D[ell[a][t],t]

Indeed, t is the arclength:

Simplify[%.%,t>0]

?curvatures

ellkk[a_][s_] =Simplify[curvatures[ell[a]][s][[1]]]

ellkk[2][s]

Plot[Evaluate[ellkk[2][s]],{s,0,so}]

Plot[Evaluate[Sign[D[ellkk[2][s],s]]],{s,0,so},PlotRange -> All]

?epsilon2D

FullSimplify[epsilon2D[ell[a]][s],s>0]

The following coincides with the plot of - Sign[[ellkk[2]’[s]]:

Plot[Simplify[%/. a-> 2],{s,0,so}]

This point is a singularity for epsilon and for the conformsl curvature (see below)

epsilon2D[ell[a]][0]

In  the vertices sv  epsilon2D is not defined;ell kk[2]’[sv)=0, the vertices are 2-flat points of the ellipses.

Plot[Evaluate[epsilon2D[ell[2]][s]],{s,so/2-.1,so/2+.1},PlotStyle -> Red]

?mcurvature2D

ellmfk[a_][s_]=Simplify[mcurvature2D[ell[a]][s]]

%/.InverseFunction[ellss[a]][s]-> u

Plot[%/. a-> 2,{u,0,2*Pi}]

Also the conformal curvature remains undefined at the vertices:

Plot[Evaluate[mcurvature2D[ell[2]][s]],{s,0,so},PlotStyle -> Red]

The vertices of the ellipse are singularities of  the Möbius curvature mcurvature2D

Table[mcurvature2D[ell[2]][s],{s,-.6,.6,.2}]

mcurvature2D[ell[a]][0]

The curvature has been calculated:

ellkk[a][s]

Also the Möbius curvature:

ellmfk[a][t]

By the "general formula" we obtain

Simplify[cfcurvature[ellkk[a]][t]]

Timing[FullSimplify[(%%/.a-> 2)-(%%%/.a->2),{t>0},TimeConstraint->Infinity]]

Mathematica 11.3: Aborted after one h without result.
Mathematicav. 8.0.1: result after 35.4217s.

The result is zero up to the vertices:

Plot[Chop[%[[2]]],{t,0,so},PlotStyle -> {Red, Thick}]

The general case with unspecified a:

Timing[FullSimplify[cfcurvature[ellkk[a]][t]-ellmfk[a][t] ,{a>0,t>0},TimeConstraint-> Infinity]]

Mathematica v. 11.3: the kernel exited, Mathematica 8,0.1: aborterd after 3 h without result.

FullSimplify[%,t>0]

3.4.2. The Anti-Ellipse

Simplify[cfre[3][mgcurve[ell[2]]][t]]

Length[%]

v4[t_] =Simplify[euklid[cfre[3][mgcurve[ell[2]]][t]]]

Length[%]

ParametricPlot[v4[t],{t,0,so}, PlotStyle -> {Blue}]

antiell = %;

Show[{grellip,antiell},PlotRange -> All]

duoell = %;

The curve antiell has the same symmetry property like the ellipse.

antiellipse[t_]=v4[t];

3.4.3. Osculating Circles

oscirc2[ell[2]][1]

oscirc[ell[2],PlotRange->{{-3,3},{-3,3}}][1.5]

The points ell[t] and antiell[t] lie on the osculating circle oscirc[ell][t]

duopicell[t_] :=Show[{oscirc[ell[2]][t],duoell,Graphics[Point[ell[2][t]]],Graphics[Point[antiellipse[t]]]},PlotRange -> All]

duopic2ell[t_] :=Show[{oscirc2[ell[2]][t],duoell,Graphics[Point[ell[2][t]]],Graphics[Point[antiellipse[t]]]},PlotRange ->All]

duopicell[-1.6]

duopicell[1.3]

duopic2ell[0.4]

3.4.4. A Family of Osculating Circles

In this subsection we construct a family of osculating circles defined by the vector cfre[2][t] of the Frenet frame.

nv[t_] =Simplify[cfre[2][mgcurve[ell[2]]][t]]

Simplify[iosp[%,%]]

The center and the radius of the osculating circle at the point t are given by

iocenter[nv[t]]

ioradius[nv[t]]

Table[Graphics[Circle[iocenter[nv[t]],Abs[ioradius[nv[t]]]]],{t,0,9}];

nscs=Show[%]

Show[{grellip,nscs},PlotRange -> All]

ellosc = %;

4.3. Example. The Logarithmic Spiral

The logarithmic spirals  are treated also in my notebook Loxodromes [lox}.

3.5.1. Curvatures and natural parameter

spiral[a][t]

ispiral[a_][t_] := spiral[a][-t]

ParametricPlot[{spiral[.2][t],spiral[-.2][t]},{t,-5,2*Pi},PlotStyle -> {Red,Green}]

ParametricPlot[{ispiral[.2][t],ispiral[-.2][t]},{t,-5,2*Pi},PlotStyle -> {Red,Green}]

We calculate  the Euclidean curvature of the oriented curves; they are opposite to each other::

Simplify[curvatures[spiral[a]][t][[1]]]

Simplify[curvatures[ispiral[a]][t][[1]]]

We calculate  the Euclidean arc length:

Clear[ss,a];ss[a_][t_]= arclength[spiral[a]][t]

Clear[fs];fs[a_][t_]=ss[a][t]

We need the inverse function

ft[a_][s_] =InverseFunction[fs[a]][s]

ft[a][s]

sspiral[a_][s_]:=Simplify[ spiral[a][ft[a][s]]]

D[sspiral[a][s],s]

Simplify[%.%]

?lambda2D

As a test of our formulas for the natural conformal parameter we consider

aa=Simplify[1/lambda2D[sspiral[a]][s],s>0&&a>0]

bb=Simplify[moebs[mgcurve[sspiral[a]]][s],s>0&&a>0]

cc =Simplify[dSS[mgcurve[sspiral[a]]][s],s>0&&a>0]

The absolute values of these expressions coincide, as expected.

we conclude aa =cc; the 3 values coincide. 
 The Eucldean curvature of the spiral depends on s:

FullSimplify[curvatures[sspiral[a]][s][[1]]]

k[a_][s_]= %;

Now we confirm the Euclidean expression for the differental of the conformal natural parameter:

Simplify[D[k[a][s],s],s>0&&a>0]

FullSimplify[cc ^4-%^2,s>0&&a>0]

The Möbius curvature of  the logarithmic spiral is

FullSimplify[mcurvature2D[sspiral[a]][s]]

Thus, as expected, the conformal curvature of the logarithmic spiral being an orbit of a 
1-parameter subgroup of theMöbius group is constant.

The constant conformal curvature depends on the parameter a by the function

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

Clearly, for a=0 the conformal curvature is not defined, since the curve is a circle.

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

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

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

The conformal curvature calculated by the “general formula” using the Euclidean curvature

k[a][s]

cfcurvature[k[a]][t]

FullSimplify[%== cfk[a],(t≠ 0)&&(a≠ 0)]

Thus again the general formula has been confirmed.

The epsilon constant equals 1 :

?epsilon

Simplify[epsilon[mgcurve[sspiral[a]]][s],a>0]

and for a<0 it equals -1:

Simplify[epsilon[mgcurve[sspiral[a]]][s],a<0]

?epsilon2D

isspiral[a_][s_] := sspiral[a][-s]

Also here s is the arc  length parameter:

D[isspiral[a][s],s]

Simplify[%.%]

FullSimplify[epsilon2D[isspiral[a]][s]]

Simplify[mcurvature2D[isspiral[a]][t]]

It coincides with the Möbius curvature of  the logarithmic spiral:.

FullSimplify[mcurvature2D[sspiral[a]][s]]

ParametricPlot[sspiral[.5][s],{ s,-5,3}, PlotStyle -> Red]

spir = %;

ParametricPlot[sspiral[1][s],{ s,-5,3}, PlotStyle -> Red,PlotRange-> {-.5,1.5}]

ParametricPlot[{{1,0},{0,-1}}.sspiral[-1][s],{ s,-5,3}, PlotStyle -> Green,PlotRange-> {-.5,1.5}]

Show[{%,%%}]

The conformal curvature of the spirals for a = 1, -1 is zero; the curves differ by a reflection at the x-axis.

FullSimplify[epsilon2D[sspiral[1]][s],s>0]

FullSimplify[epsilon2D[sspiral[-1]][s],s>0]

The epsilon invariants of the curves differ, thus they are not conformally equivalent as oriented curves.

FullSimplify[sspiral[1][s] -{{1,0},{0,-1}}.sspiral[-1][-s]]

This example  demonstrates the geometric meaning of the epsilon invariant; it equals 1, if the curve turns right in the orientation of the embedding  plane or sphere, and -1 if it turns left.

3.5.2. The Anti-Spiral

Here is a parameter representation of the antispiral

antispiral[a_][s_] :=FullSimplify[euklid[cfre[3][mgcurve[sspiral[a]]][s]]]

spi[s_] =antispiral[1/2][s]

ParametricPlot[spi[s],{s,-5,3},PlotStyle -> Green]

antispir = %;

Show[{spir,antispir},PlotRange -> All]

spirduo = %;

Exercise. Using the formula for antispiral[a][s] prove that the curve antispiral[a][s] is Möbius equivalent to  spiral[a][t].  Hint: Introduce the argument of Cos in antispiral[a][s]as a new parameter t.

3.5.3. Osculating Circles

oscirc2[sspiral[.5]][1.5]

oscirc[sspiral[.5],PlotRange->{{-3,3},{-3,3}}][1.5]

The points ell[t] and antiell[t] lie on the osculating circle oscirc[par][t]

duopicspir[t_] :=Show[{oscirc2[sspiral[1/2]][t],spirduo,Graphics[Point[sspiral[1/2][t]]],Graphics[Point[antispiral[1/2][t]]]},PlotRange -> All]

antispiral[1/2][s]/.s->1/2

duopicspir[s]/.s->1/2

duopicspir[t]/. t->3/2

spirfam = Table[duopicspir[t]/.t->tt, {tt,.2,1.6,.2}];

Show[%]

References

[BT] W. Blaschke, G. Thomsen.  Volesungen über Differentialgeometrie III.  Differentialgeometrie der Kreise und Kugeln. Verlag Springer. Berlin 1929.

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

[G94] Alfred Gray. Differentialgeometrie. Klassische Theorie in moderner Darstellung. (Übersetzung aus dem Amerikanischen H. Gollek).
Spektrum Akademischer Verlag, Heidelberg.Berlin.Oxford. 1994.

[ECG] Rolf Sulanke. The Fundamental Theorem for Curves in the n-Dimensional Euclidean  Space. 2009. On my homepage.

[OS3] A. L. Onishchik, R. Sulanke. Projective and Cayley-Klein Geometries. Springer-Verlag. Berlin,Heidelberg. 2006.

[mdg] Rolf Sulanke. Möbius Differential Geometry. On my  homepage.

{lox] R. Sulanke. Loxodromes. A Mathematica Notebook. On my homepage.

Homepage

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