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:
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  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); 
Declare 1-forms for the space coframe: Forms(e[k]=1); ![{e[k]}](prod/atlas/examples/images/planecurve6.gif)
Declare vectors for the space frame: Vectors(E[j]); ![{E[j]}](prod/atlas/examples/images/planecurve7.gif)
Declare coframe on the space: Coframe(e[1]=d(x),e[2]=d(y)); ![[e[1] = d(x), e[2] = d(y)]](prod/atlas/examples/images/planecurve8.gif)
Declare frame on the space: Frame(E[k]); ![[E[1] = Diff(``,x), E[2] = Diff(``,y)]](prod/atlas/examples/images/planecurve9.gif)
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])](prod/atlas/examples/images/planecurve10.gif)
Calculate connection of the metric: Connection(Omega); ![Omega[i,j]](prod/atlas/examples/images/planecurve11.gif)
Astroid Define the curve as a manifold: Domain(A); 
Declare constant : Constants(a); 
Declare 1-form for curve's coframe Forms(w[i]=1); ![{e[k], w[i]}](prod/atlas/examples/images/planecurve15.gif)
Declare vectors for curve's frame: Vectors(W[k]); ![{W[k]}](prod/atlas/examples/images/planecurve16.gif)
Declare coframe on the curve: Coframe(w[1]=d(t[a])); ![[w[1] = d(t[a])]](prod/atlas/examples/images/planecurve17.gif)
Declare frame of the curve: Frame(W[l]); ![[W[1] = Diff(``,t[a])]](prod/atlas/examples/images/planecurve18.gif)
Declare mapping of the curve into : Mapping(pi,A,R^2,x=a*cos(t[a])^3, y=a*sin(t[a])^3); 

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])](prod/atlas/examples/images/planecurve22.gif)
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](prod/atlas/examples/images/planecurve23.gif) Calculate invariants of the mapping: Inv[pi]:=Invariants(pi); 
Extract tangent normalized vector field: T:=Inv[pi][basis][0]; ![T := -cos(t[a])*E[1]+sin(t[a])*E[2]](prod/atlas/examples/images/planecurve26.gif)
Extract normal normalized vector field: N:=Inv[pi][basis][1]; ![N := sin(t[a])*E[1]+E[2]*cos(t[a])](prod/atlas/examples/images/planecurve27.gif)
Extract curvature of the curve: k:=Inv[pi][curvatures][1]; ![k := 1/3*1/(a*cos(t[a])*sin(t[a]))](prod/atlas/examples/images/planecurve28.gif)
Let us check the "orthonormality" of the moving frame vectors T and N. To do this we use metric tensor field : 'g[R](T,T)'=simplify(g[R](T,T)); 'g[R](N,N)'=simplify(g[R](N,N));  = 1](prod/atlas/examples/images/planecurve30.gif)
 = 1](prod/atlas/examples/images/planecurve31.gif)
'g[R](T,N)'=g[R](T,N);  = 0](prod/atlas/examples/images/planecurve32.gif)
Abstract curve (Cartesian) Let a parametric curve be given ![PIECEWISE([x = xi(tau), ``],[y = eta(tau), ``])](prod/atlas/examples/images/planecurve33.gif) Define the curve as a manifold: Domain(A[c]); ![A[c]](prod/atlas/examples/images/planecurve34.gif)
Define two functions on the curve: Functions(xi=xi(t),eta=eta(t)); 
Declare 1-form for curve's coframe Forms(v[i]=1); ![{e[k], w[i], v[i]}](prod/atlas/examples/images/planecurve36.gif)
Declare vectors for curve's frame: Vectors(V[k]); ![{V[k]}](prod/atlas/examples/images/planecurve37.gif)
Declare coframe on the curve: Coframe(v[1]=d(t)); ![[v[1] = d(t)]](prod/atlas/examples/images/planecurve38.gif)
Declare frame of the curve: Frame(V[l]); ![[V[1] = Diff(``,t)]](prod/atlas/examples/images/planecurve39.gif)
Declare mapping of the curve into : Mapping(psi,A[c],R^2,x=xi, y=eta); 
![A[c].`--->`.(R^2)](prod/atlas/examples/images/planecurve42.gif)
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])](prod/atlas/examples/images/planecurve43.gif)
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...](prod/atlas/examples/images/planecurve46.gif)
Change coordinates on  To continue with cardioid and abstract polar curves we have to change coordinate system on manifold 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); 
Declare 1-forms for the space coframe: Forms(u[k]=1); ![{e[k], w[i], v[i], u[k]}](prod/atlas/examples/images/planecurve50.gif)
Declare vectors for the space frame: Vectors(U[j]); ![{U[j]}](prod/atlas/examples/images/planecurve51.gif)
Declare coframe on the space: Coframe(u[1]=d(r),u[2]=d(phi)); ![[u[1] = d(r), u[2] = d(phi)]](prod/atlas/examples/images/planecurve52.gif)
Declare frame on the space: Frame(U[k]); ![[U[1] = Diff(``,r), U[2] = Diff(``,phi)]](prod/atlas/examples/images/planecurve53.gif)
Declare mapping of into : Mapping(f,E^2,R^2,x=r*cos(phi), y=r*sin(phi)); 

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])](prod/atlas/examples/images/planecurve58.gif)
Calculation of the corresponding connection : Connection(Gamma); ![Gamma[i,j]](prod/atlas/examples/images/planecurve59.gif)
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]])](prod/atlas/examples/images/planecurve60.gif)
Cardioid Define the curve as a manifold: Domain(C); 
Declare 1-form for curve's coframe Forms(theta[i]=1); ![{e[k], theta[i], w[i], v[i], u[k]}](prod/atlas/examples/images/planecurve62.gif)
Declare vectors for curve's frame: Vectors(Theta[k]); ![{Theta[k]}](prod/atlas/examples/images/planecurve63.gif)
Declare coframe on the curve: Coframe(theta[1]=d(tau[c])); ![[theta[1] = d(tau[c])]](prod/atlas/examples/images/planecurve64.gif)
Declare frame of the curve: Frame(Theta[l]); ![[Theta[1] = Diff(``,tau[c])]](prod/atlas/examples/images/planecurve65.gif)
Declare mapping of the curve into : Mapping(alpha,C,E^2,r=a*(1+cos(tau[c])), phi=tau[c]); 

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])](prod/atlas/examples/images/planecurve69.gif)
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 ...](prod/atlas/examples/images/planecurve72.gif)
Abstract curve (polar) Let a parametric curve be given by equation in polar coordinates: Define the curve as a manifold: Domain(A[p]); ![A[p]](prod/atlas/examples/images/planecurve74.gif)
Declare function : Functions(rho=rho(tau)); 
Declare 1-form for curve's coframe Forms(zeta[i]=1); ![{e[k], theta[i], w[i], v[i], zeta[i], u[k]}](prod/atlas/examples/images/planecurve77.gif)
Declare vectors for curve's frame: Vectors(ZETA[k]); ![{ZETA[k]}](prod/atlas/examples/images/planecurve78.gif)
Declare coframe on the curve: Coframe(zeta[1]=d(tau)); ![[zeta[1] = d(tau)]](prod/atlas/examples/images/planecurve79.gif)
Declare frame of the curve: Frame(ZETA[l]); ![[ZETA[1] = Diff(``,tau)]](prod/atlas/examples/images/planecurve80.gif)
Declare mapping of the curve into : Mapping(lambda,A[p],E^2,r=rho, phi=tau); 
![A[p].`--->`.(E^2)](prod/atlas/examples/images/planecurve83.gif)
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])](prod/atlas/examples/images/planecurve84.gif)
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/...](prod/atlas/examples/images/planecurve87.gif)
|