A Notation for Plane Geometry
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[C, u] ; u is line. Means line passing C and parallel to u.
- AngularBisector[C, E, D]
- Tangent[V, k] ; k is a circle or conics or curve
- Perpendicular[C, a] ; passing C parallel to A
- LineBisector[b] ; b is another line
- LineBisector[E, A]
Line segments or rays.
- Ray[E, C]
- Segment[I, U]
- Vector[H, I]; a segment of line representing vector
- Circle[T, U] ; T is center, U is a point on circle.
- Circle[A, B, C] ; circle thru 3 points
- Circle[G, 2] ; center and a radius
- Semicircle[I, U] ; produce half circ arc; clockwise from I to U.
- CircumcircularArc[P, Q, R] ; circular arc thru 3 points, begin at P, ends at R, counterclockwise.
- CircularArc[H, K, O] ; centered on H, starting at K, ending on line HO. Goes counter-clockwise.
- CircularSector[S, T, V] a filled sector much like CircularArc.
- Mirror[I, G] ; reflection of I thru G. First argument can be other objects. Second argument can be point or line (but not circle or conics).
- Rotate[c, 45°, G] ; object to rotate, angle, center.
- Translate[J, v] ; v is a vector
- Dilate[U, 0.5, G] ; U is the object, G is the center.
- Conic[J, M, N, L, E] ; conic thru 5 points
- Diameter[a1, c] ; a1 is a line. c is a conics. This produces a line passing thru the conics's center. It has to do with pole and polar.
- Polygon[L, M, N, O]
- Polygon[O, P, 5] regular polygon of 5 sides
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.