Tuesday, June 21, 2011

Plane curves: astroid, cardioid and abstract plane curve

Plane curves: astroid, cardioid and abstract plane curve

What we do?

In this article we discuss how calculate the curvatures and moving frame.
  • As an example we calculate the curvatures and moving frame of the following plane curves: astroid, cardioid and abstract plane curve.
  • We assume that astroid is given as a parametric curve in the Cartesian coordinate system and the cardioid is given as a parametric curve in the polar coordinate system.
  • For abstract plane curve we will do the calculations in both systems.



What we use?

For the calculations we will use atlas 2 for Maple - modern differential geometry package.
In the end of the article you can find the file with code.

Let's begin and have fun!

Load atlas package:
with(atlas);

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


Description of the total space

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

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

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

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

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

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

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

Calculate the connection of the metric:
Connection(Omega);

Now the working space is defined completely and we can start to solve the problem.

Astroid

The "graph paper" of the Astroid curve:
with(plots):
subs([cos(t)^3, sin(t)^3, t = -2*Pi .. 2*Pi]):
plot(%, thickness = 3, title = "Astroid");

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

Declare constant a:
Constants(a);

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

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

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

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

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

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

It is obvious that the metric gives squared differential of the curve's arc:
Calculate invariants of the mapping:
Inv[pi] := Invariants(pi);

Extract the tangent normalized vector field:
T := Inv[pi][basis][0];

Extract normal normalized vector field:
N := Inv[pi][basis][1];

Extract the curvature of the curve:
kappa := Inv[pi][curvatures][1];

Let us check the "orthonormality" of the moving frame vectors T and N. To do this we use the metric tensor field:
'g[R](T, T)' = simplify(g[R](T, T));
'g[R](N, N)' = simplify(g[R](N, N));

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

Abstract curve (Cartesian)

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

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

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

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

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

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

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

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

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

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 the Euclidean space as a manifold:
Domain(E^2);

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

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

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

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

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

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

Calculation of the corresponding connection:
Connection(Gamma);

Let us see the result:
eval(Gamma);

Cardioid

The "graph paper" of the Cardioid curve:
with(plots):
subs({a = 1}, [a*(2*cos(t)-cos(2*t)), a*(2*sin(t)-sin(2*t)), t = -2*Pi .. 2*Pi]):
plot(%, thickness = 3, title = "Cardioid a=1");

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

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

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

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

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

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);

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

Abstract curve (polar)

Let a parametric curve be given by equation in polar coordinates.

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

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

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

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

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

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

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

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

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


Conclusions

Wow! This article is really long but what do we get?

We calculate curvatures and moving frame of the plane curves.
For example, we use astroid, cardioid and abstract plane curve.
For abstract plane curve we will do calculations in Cartesian and Polar coordinate systems.

Get the stuff

You can get Maple Worksheet file(.mv) with code of this article here.
Post a Comment