Dynamic Geometry using Logic Programming
Supervisor: Frank Kriwaczek (Room 431)
A dynamic geometry system allows you to draw basic geometric entities, such as points, lines and polygons at arbitrary positions on a blank sheet. You can then start to construct new items based on these entities and on other items already constructed.
For example, you could start out drawing three points on the sheet and then construct a triangle with the points as vertices. After this you could construct three medians (i.e., the line segments joining verices with the mid-points of the opposite sides).
Once you have created a diagram you may notice interesting geometric properties.
For example, the three medians are concurrent (i.e., they intersect in a single point).
You can then check whether this property is "an invariant", or is just a lucky consequence of the particular positions and dimensions of the original entities you drew.
For example, you can click on one of the original points, drag it to a new position and observe as the diagram adjusts itself, with the three medians still concurrent.
Your observation may lead you to hypothesize a general result, which you could then try to prove using traditional methods of Euclidean Geometry.
The three best known dynamic geometry systems are Cabri Geomètre (French), The Geometer's Sketchpad (American) and Cinderella (German). Each can be used as a desktop application, although they all now offer the facility of exporting completed diagrams as live Java applets, to experiment with over the Web. See for example:
Cabri: http://www-cabri.imag.fr/cabrijava/index.html
Geometer's Sketchpad: http://www.keypress.com/sketchpad/java_gsp/gallery.html
Cinderella: http://www.cinderella.de/en/demo/
The aim of this project is to build a rudimentary dynamic geometry system using Logic Programming languages Prolog and / or CLP. You will probably need to link up your logic programming engine and knowledge base to an interactive graphics system written in another language such as Java, Visual Basic or Tcl/Tk.SICStus Prolog provides such interfaces. It would be desirable, but not essential to inculde an "Export to Web" facility.