Overview of Descartes-Geometry

by

Denis Monasse

Mathsoft Overseas

Availability

Descartes is a registered trade mark of Mathsoft Overseas, Inc. Copyright © 1992, by Mathsoft Overseas, Inc.

The program Descartes®-Geometry is available on any platform at 30 % of the Mathematica price. 

For information and orders, please contact:
Mathsoft Overseas, cp 641, 1211 Geneva 3 (Switzerland). 
Tel: 41 22 / 346 52 60. Fax: 41 22 / 346 59 39

Introduction

In the seventeenth century, two french mathematicians, Pierre de Fermat and RenÎ Descartes, realized that algebra and geometry could be unified in a single science that was called analytic geometry. In fact, the recognition for the foundation of the new science went to Descartes although Fermat's work was a little earlier. The reason is due to the formalism used by Descartes who adopted the notation of modern algebra whereas Fermat had kept the cumbersome greek notations. Today, we can resume the treatment of analytic geometry in the context of the modern computers and information languages among which Mathematica is especially well adapted with its outstanding graphics facilities and its functional programming.
				Let us start

Geometric functions and geometric arrays

Scalar functions are well known: to a given scalar x corresponds another scalar y through an operator called f. If the coordinates x and y of a point M are scalar functions of a parameter t, then M is a point function of t and may be noted M[t]. 
In the same way, if the points which define a straight line or a circle are functions of a parameter t, straight line function or circle function are introduced. Translated into Mathematica language, the parameter t is a labeled pattern which is written t_.
Let us give a few examples. Any point on the circle whose center is the origin and the radius 1 can be written
M[t_]=POINT[Cos[t],Sin[t]].
and so are all tbe straight lines passing through the origin:
d[t_]=POINT [0,0] .M[t] 
or all the circles of radius 1 passing through the origin:
c[t_]=M[t]<POINT[0,0] .
With geometric functions, one can deal with families of geometric objects in a concise way.

Altitudes of a triangle

Let us assume that we want to illustrate some properties of a triangle. First, we convert the points A, B, C as point functions depending on an integer variable

m[0]=a;
m[1]=b;
m[2]=c;
m[t_]:=m[Mod[t,3]]

This is a way to define the vertices of a triangle by setting up a correspondance with the set of the non negative integers; the modulo function Mod ensures indeed that the arguments take the values 0, 1, 2 cyclically. The family of the sides is given by

d[t_]:=m[Mod[t+1,3]].m[Mod[t+2,3]];

and, for a given t, the side is associated with the opposite vertex. We are now in position to investigate the properties of the triangle ABC. 
Let us for instance construct  its heights which are the straight lines issued from a vertex and perpendicular to the opposite side. To do it, we shall generate geometric arrays with the function ArrayG. The first argument of ArrayG is the operator of creation of the heights, here StraightPerpendicular. The second argument is the point function m of the vertices, the third argument the straight line function d of the sides of the triangle, the fouth argument is the name h given to the heights, the fifth argument the number 3 of straight lines to be constructed.

ar=ArrayG[StraightPerpendicular,m,d,h,3]

The output of ArrayG consists of a list of two components: 
- the geometric figure with an automatic naming of its elements 
- the analytical results in the form of substitution rules which in the present case may be used 
		to test that the heights are concurrent:

ConcurrentQ@@(Array[h,3]/.ar[[2]])

Circles tangent to a circle and a straight line

The circles tangent both to a circle of radius R and center F  and to a straight line D have their center on a parabola of focus F and directrix a parallel to D at the distance R from D. In the present application, the directrix is the Oy axis, the focus lies on the x-axis at abscissa 3 and the radius of the circle is 1.

focus=POINT[3,0];
directrix=STRAIGHT[1,0,0];
plot=Draw[PointSize[.02],{focus,"F"},
          directrix,focus<POINT[2,0]]

The command Conic returns the quadratic form of the conic which is converted to a parametric form with ConicParameter. As a POINT function is required to define the center of the circles, the operator POINT is applied(@@).

parabola=Conic[focus,directrix,{x,y}];
center[t_]=
 POINT@@ConicParameter[parabola,{x,y,t-4}];

A geometric function may be constant, this is the case of the straight line D

straight[t_]=STRAIGHT[1,0,-1];

The family of circles is then generated using the command ArrayG with CircleByCenterAndStraight as the operator and the functions center and straight as arguments. The result is the function circle. 7 is the number of circles and no naming is needed.

fam=ArrayG[CircleByCenterAndStraight,
           center,
           straight,
           circle,
           7,
           Named->False]

All the elements of the figure are regrouped with Show.

Show[plot,fam[[1]]]