A Notation for Plane Geometry

By Xah Lee. Date:

I've been working in classic plane geometry for long, especially in the mid 1990s. I've been wanting to create a notation for it, such as Line[A,B] meaning constructing a line between points A and B, and also things like Rotate[A,α], Translate[A], bisect[A,B], perpendicular[c]… etc. But i've actually never took the time to sit down and design such a system. Well, GeoGebra use a notation similar to what i had in mind. Here's a list from GeoGebra:

By GeoGebra default, capital letters represent a point, lower case letters are lines, circles, conics. (Though, user are allowed to rename objects without following this convention.)

Lines opening on both ends:

Line segments or rays.


Circle arcs:


Conic sections:


This notation has a shortcoming. They represent objects, but does not represents the transformation or construction process itself. For example, Rotate[c, 45°, G] is a object that is c rotated by 45° around G. But it does not represent rotation of G by 45° itself. Similarly for Translate[J, v], Dilate[U, 0.5, G] and others. A work around is to create a notation without the first argument. For example, Rotate[45°, G] will represent a rotation of 45° around G. This way, Rotate[45°, G] can be used as a notation for transformation. In particular, in group theory contexts, or even plane geometry. To represent a object so rotated, one can write Rotate[45°, G][c], meaning apply the rotation to object c. Here, we consider Rotate as a function, with first argument being a angle and second argument being a center. It returns a function, that is applied to c. In this way, transformations can be sequenced together Rotate[45°, G]*Rotate[42°,D] to represent product of binary operations. Similarly, constructions like Line[],LineBisector[], Perpendicular[] can be nested to represent a sequence of constructions.