Digi Area Group - Math Tools for Professionals
   Maple and Mathematica packages - math tools for professionals

atlas™ - modern differential geometry for Maple™

> Features List & Examples
> Template Worksheets
> Screenshots
> Documentation & Downloads
> License & Pricing
> Buy Online

 
 
 
 
Google

Features List & Examples  |  Introduction  |  Dimension  |  Indexing  |  Forms  |  Metric  |  atlasWizard - Maplet™

Plane curves

Copyright © 2004-2008  DigiArea Group . All rights reserved.

Description:

This worksheet illustrates how to use atlas  package to solve problems in elementary differential geometry. As an example we calculate curvatures  and moving frame  of  the following plane curves:
 

[Maple Plot]     [Maple Plot]     [Maple Plot]  

We assume that astroid  is given as a parametric curve in Cartesian coordinate system and cardioid  is given as a parametric curve in polar coordinate system. For abstract  plane curve we will do calculations in both systems.  

Solution:

Load atlas package:

restart:
with(atlas):

Just for right simplification:
`atlas/simp`:=proc(a) factor(simplify(a,trig)) end:

Description of the total space R^2

First of all we have to describe the space we are working in. The space is 2-dimensional Euclidean (flat) space i.e. a plane. To define the space we declare domain , forms , vectors , coframe , frame , flat metric  and calculate connection  (it equals to zero of cause).

Define Euclidean space  as a manifold :
Domain(R^2);

R^2

Declare 1-forms  for the space coframe:
Forms(e[k]=1);

{e[k]}

Declare vectors  for the space frame:
Vectors(E[j]);

{E[j]}

Declare coframe  on the space:
Coframe(e[1]=d(x),e[2]=d(y));

[e[1] = d(x), e[2] = d(y)]

Declare frame  on the space:
Frame(E[k]);

[E[1] = Diff(``,x), E[2] = Diff(``,y)]

Declare flat metric  on the space:
Metric(g[R]=d(x)&.d(x)+d(y)&.d(y));

g[R] = `&.`(e[1],e[1])+`&.`(e[2],e[2])

Calculate connection  of the metric:
Connection(Omega);

Omega[i,j]

Astroid

Define the curve as a manifold:
Domain(A);

A

Declare constant a :
Constants(a);

{-I, Pi, I, a, _Z, Catalan}

Declare 1-form for curve's coframe
Forms(w[i]=1);

{e[k], w[i]}

Declare vectors for curve's frame:
Vectors(W[k]);

{W[k]}

Declare coframe on the curve:
Coframe(w[1]=d(t[a]));

[w[1] = d(t[a])]

Declare frame of the curve:
Frame(W[l]);

[W[1] = Diff(``,t[a])]

Declare mapping of the curve into R^2 :
Mapping(pi,A,R^2,x=a*cos(t[a])^3,
                 y=a*sin(t[a])^3);

pi

A.`--->`.(R^2)

Calculate metric on the curve using &/  operator:
Metric(g[A] = g[R] &/ pi);

g[A] = -9*a^2*cos(t[a])^2*(cos(t[a])-1)*(cos(t[a])+1)*`&.`(w[1],w[1])

It is obvious that the metric gives squared differential of the curve's arc : dl^2 = -9*a^2*cos(t[a])^2*(cos(t[a])-1)*(cos(t[a])+1)*dt[b]^2

Calculate invariants of the mapping:
Inv[pi]:=Invariants(pi);

Inv[pi] := TABLE([curvatures = TABLE(zero,[1 = [1/3*1/(a*cos(t[a])*sin(t[a]))]]), basis = TABLE(zero,[0 = [-cos(t[a])*E[1]+sin(t[a])*E[2]], 1 = [sin(t[a])*E[1]+E[2]*cos(t[a])]])])
planecurve25_1
planecurve25_2

Extract tangent  normalized vector field:

T:=Inv[pi][basis][0];

T := -cos(t[a])*E[1]+sin(t[a])*E[2]

Extract normal  normalized vector field:

N:=Inv[pi][basis][1];

N := sin(t[a])*E[1]+E[2]*cos(t[a])

Extract curvature  of the curve:

k:=Inv[pi][curvatures][1];

k := 1/3*1/(a*cos(t[a])*sin(t[a]))

Let us check the "orthonormality" of the moving frame vectors T and N. To do this we use metric tensor field g[R] :

'g[R](T,T)'=simplify(g[R](T,T));
'g[R](N,N)'=simplify(g[R](N,N));
 

g[R](T,T) = 1

g[R](N,N) = 1

'g[R](T,N)'=g[R](T,N);

g[R](T,N) = 0

Abstract curve (Cartesian)

Let a parametric curve be given PIECEWISE([x = xi(tau), ``],[y = eta(tau), ``])

Define the curve as a manifold:
Domain(A[c]);

A[c]

Define two functions on the curve:
Functions(xi=xi(t),eta=eta(t));

{eta, xi}

Declare 1-form for curve's coframe
Forms(v[i]=1);

{e[k], w[i], v[i]}

Declare vectors for curve's frame:
Vectors(V[k]);

{V[k]}

Declare coframe on the curve:
Coframe(v[1]=d(t));

[v[1] = d(t)]

Declare frame of the curve:
Frame(V[l]);

[V[1] = Diff(``,t)]

Declare mapping of the curve into R^2 :
Mapping(psi,A[c],R^2,x=xi,
                     y=eta);

psi

A[c].`--->`.(R^2)

Now we can calculate metric induced on the curve by the mapping.
Metric(g[A[c]] = g[R] &/ psi);

g[A[c]] = (Diff(xi,t)^2+Diff(eta,t)^2)*`&.`(v[1],v[1])

Calculate invariants of the mapping:
Inv[A[c]]:=Invariants(psi);

Inv[A[c]] := TABLE([curvatures = TABLE(zero,[1 = [(-Diff(eta,`$`(t,2))*Diff(xi,t)+Diff(xi,`$`(t,2))*Diff(eta,t))/(Diff(xi,t)^2+Diff(eta,t)^2)^(3/2)]]), basis = TABLE(zero,[0 = [Diff(xi,t)/(Diff(xi,t)^2...
planecurve45_1

planecurve45_2
 
Inv[A[c]] := TABLE([curvatures = TABLE(zero,[1 = [(-Diff(eta,`$`(t,2))*Diff(xi,t)+Diff(xi,`$`(t,2))*Diff(eta,t))/(Diff(xi,t)^2+Diff(eta,t)^2)^(3/2)]]), basis = TABLE(zero,[0 = [Diff(xi,t)/(Diff(xi,t)^2...

Change coordinates on R^2

To continue with cardioid and abstract polar curves we have to change coordinate system  on manifold R^2  from Cartesian  to polar . We can do it easily just by definition of another Euclidean domain .

Define Euclidean space  as a manifold :
Domain(E^2);

E^2

Declare 1-forms  for the space coframe:
Forms(u[k]=1);

{e[k], w[i], v[i], u[k]}

Declare vectors  for the space frame:
Vectors(U[j]);

{U[j]}

Declare coframe  on the space:
Coframe(u[1]=d(r),u[2]=d(phi));

[u[1] = d(r), u[2] = d(phi)]

Declare frame  on the space:
Frame(U[k]);

[U[1] = Diff(``,r), U[2] = Diff(``,phi)]

Declare mapping  of E^2  into R^2 :
Mapping(f,E^2,R^2,x=r*cos(phi),
                  y=r*sin(phi));

f

E^2.`--->`.(R^2)

Now we can calculate metric  induced by the mapping:
Metric(g[E] = g[R] &/ f);

g[E] = `&.`(u[1],u[1])+r^2*`&.`(u[2],u[2])

Calculation of the corresponding connection :
Connection(Gamma);

Gamma[i,j]

Let us see the result:
eval(Gamma);

TABLE([(2, 1) = 1/r*u[2], (1, 1) = 0, (1, 2) = -r*u[2], (2, 2) = 1/r*u[1]])

Cardioid

Define the curve as a manifold:
Domain(C);

C

Declare 1-form for curve's coframe
Forms(theta[i]=1);

{e[k], theta[i], w[i], v[i], u[k]}

Declare vectors for curve's frame:
Vectors(Theta[k]);

{Theta[k]}

Declare coframe on the curve:
Coframe(theta[1]=d(tau[c]));

[theta[1] = d(tau[c])]

Declare frame of the curve:
Frame(Theta[l]);

[Theta[1] = Diff(``,tau[c])]

Declare mapping of the curve into E^2 :
Mapping(alpha,C,E^2,r=a*(1+cos(tau[c])),
                    phi=tau[c]);

alpha

C.`--->`.(E^2)

Calculate metric on the curve using `&/` operator:
Metric(g[C] = g[E] &/ alpha);

g[C] = 2*a^2*(1+cos(tau[c]))*`&.`(theta[1],theta[1])

Calculate invariants of the mapping:
Inv[C]:=Invariants(alpha);

Inv[C] := TABLE([curvatures = TABLE(zero,[1 = [3/4*1/a/(1+cos(tau[c]))*(2+2*cos(tau[c]))^(1/2)]]), basis = TABLE(zero,[0 = [-sin(tau[c])/(2+2*cos(tau[c]))^(1/2)*U[1]+U[2]/a/(2+2*cos(tau[c]))^(1/2)], 1 ...
planecurve71_1

planecurve71_2
Inv[C] := TABLE([curvatures = TABLE(zero,[1 = [3/4*1/a/(1+cos(tau[c]))*(2+2*cos(tau[c]))^(1/2)]]), basis = TABLE(zero,[0 = [-sin(tau[c])/(2+2*cos(tau[c]))^(1/2)*U[1]+U[2]/a/(2+2*cos(tau[c]))^(1/2)], 1 ...

Abstract curve (polar)

Let a parametric curve be given by equation r = rho(phi)  in polar coordinates:

Define the curve as a manifold:
Domain(A[p]);

A[p]

Declare function rho = rho(t) :
Functions(rho=rho(tau));

{eta, xi, rho}

Declare 1-form for curve's coframe
Forms(zeta[i]=1);

{e[k], theta[i], w[i], v[i], zeta[i], u[k]}

Declare vectors for curve's frame:
Vectors(ZETA[k]);

{ZETA[k]}

Declare coframe on the curve:
Coframe(zeta[1]=d(tau));

[zeta[1] = d(tau)]

Declare frame of the curve:
Frame(ZETA[l]);

[ZETA[1] = Diff(``,tau)]

Declare mapping of the curve into E^2 :
Mapping(lambda,A[p],E^2,r=rho,
                        phi=tau);

lambda

A[p].`--->`.(E^2)

Calculate metric on the curve using `&/` operator:
Metric(g[A[p]] = g[E] &/ lambda);

g[A[p]] = (Diff(rho,tau)^2+rho^2)*`&.`(zeta[1],zeta[1])

Calculate invariants of the mapping:
Inv[A[p]]:=Invariants(lambda);

Inv[A[p]] := TABLE([curvatures = TABLE(zero,[1 = [(rho^2-Diff(rho,`$`(tau,2))*rho+2*Diff(rho,tau)^2)/(Diff(rho,tau)^2+rho^2)^(3/2)]]), basis = TABLE(zero,[0 = [Diff(rho,tau)/(Diff(rho,tau)^2+rho^2)^(1/...
planecurve86_1

planecurve86_2
Inv[A[p]] := TABLE([curvatures = TABLE(zero,[1 = [(rho^2-Diff(rho,`$`(tau,2))*rho+2*Diff(rho,tau)^2)/(Diff(rho,tau)^2+rho^2)^(3/2)]]), basis = TABLE(zero,[0 = [Diff(rho,tau)/(Diff(rho,tau)^2+rho^2)^(1/...