Für diesen Sketch benötigen Sie eine Tastatur und eine Maus.
Um einen Punkt zu erzeugen, klicken Sie mit der linken Maustaste auf die Oberfläche.
Um diesen Punkt zu markieren, muss man gleichzeitig die SHIFT-Taste drücken. (Mit der SHIFT-Taste
links oder rechts
erzeugt man Großbuchstaben).
Hält man die linke Maustaste auf einem Punkt gedrückt und bewegt die Maus, kann man diesen Punkt
verschieben –
alle von ihm abhängigen Objekte (Geraden, Kreise, Schnittpunkte …) passen sich dabei automatisch
an.
Eine Gerade bzw. Strecke markiert man mit der rechten Maustaste. Es gibt eine Unmenge geometrische Figuren,
die
man hier eintragen kann. Welche Tasten verwendet werden müssen, ist unten dargestellt.
| Tasten- oder Mausaktion | Wirkung |
|---|---|
| Taste l | Strecke, zwei Punkte |
| Taste g | Gerade, zwei Punkte |
| Taste m | Mittelsenkrechte, zwei Punkte |
| Taste h | Seitenhalbierende, drei Punkte, vom ersten aus |
| Taste w | Winkelhalbierende, drei Punkte, vom ersten aus |
| Taste o | Lot, drei Punkte, vom ersten aus |
| Taste p | Parallele, drei Punkte, Parallele durch den ersten |
| Taste r | Rechteck, zwei Punkte |
| Taste c | Kreis, zwei Punkte, Mittelpunkt auf dem ersten |
| Taste e | Ellipse, drei Punkte, erster Punkt ist der Punkt in der Mitte |
| Taste y | Polygon, mindestens drei Punkte, Verbindung der Punkte nach der Reihe |
| Taste q | Schnittpunkt, zwei Geraden oder Strecken |
| Taste b | Punkt auf Gerade, eine Gerade oder Strecke, ein Punkt |
| Taste v | Pfad, vier Punkte |
| Taste x | Bezier-Kurve, vier Punkte |
| Taste d | Markierte Objekte löschen |
Die in der Tabelle erwähnte Anzahl von Punkten bzw. von Geraden müssen vor dem entsprechenden
Tastendruck
markiert sein!
Hier erfährt man, was Pfade und
Bezier-Kurven
sind.
Interessant an diesem Sketch ist weniger die Zeichnerei selbst als der Entwurf im Hintergrund. Jedes Objekt – Punkt, Gerade, Kreis, Schnittpunkt, Mittelsenkrechte usw. – ist eine eigene Klasse, die von einer gemeinsamen abstrakten Basisklasse (z. B. KonstruktionsObjekt) erbt. Diese Basisklasse schreibt vor, dass jede Unterklasse mindestens zwei Methoden implementieren muss: eine zum Zeichnen (zeichne()) und eine zum Neuberechnen der eigenen Lage (berechne()), sobald sich ein abhängiges Objekt ändert. Weil jede Unterklasse diese Methoden auf ihre eigene Weise umsetzt – ein Kreis berechnet seinen Radius anders als eine Mittelsenkrechte ihre Steigung – spricht man hier von Polymorphie: Der Editor kann durch die ganze Liste aller Objekte laufen und einfach objekt.zeichne() aufrufen, ohne zu wissen oder zu unterscheiden, um welchen konkreten Typ es sich handelt.
Damit das Verschieben eines Punktes automatisch alle abgeleiteten Objekte aktualisiert, merkt sich jedes Objekt, von welchen anderen Objekten es abhängt (bei einer Geraden z. B. ihre beiden Randpunkte, bei einem Schnittpunkt die beiden sich schneidenden Geraden). Logisch bilden alle Konstruktionsobjekte damit einen gerichteten azyklischen Graphen (DAG) – den sogenannten Abhängigkeitsgraphen. Wird ein Basispunkt verschoben, muss nicht die gesamte Konstruktion neu berechnet werden, sondern nur der Teil, der über Kanten dieses Graphen von dem verschobenen Punkt erreichbar ist. Damit das in der richtigen Reihenfolge geschieht – ein Schnittpunkt darf erst neu berechnet werden, wenn beide ihn definierenden Geraden schon aktuell sind – durchläuft man den Graphen in topologischer Sortierung: Objekte ohne offene Abhängigkeiten zuerst, dann schrittweise alle, deren Voraussetzungen bereits erfüllt sind. Entstünde dabei ein Zyklus (ein Objekt hängt, direkt oder über Umwege, von sich selbst ab), gäbe es keine gültige Reihenfolge mehr – deshalb muss der Editor beim Anlegen neuer Objekte darauf achten, dass kein Objekt von einem Objekt abhängt, das wiederum (mittelbar) von ihm selbst abhängt.
Dieses Muster – Objekte, die sich bei Änderung ihrer Abhängigkeiten selbst aktualisieren – ist als Observer-Entwurfsmuster bekannt und findet sich in ähnlicher Form in jeder dynamischen Geometrie-Software (z. B. GeoGebra) sowie in Tabellenkalkulationen: Auch dort löst die Änderung einer Zelle die Neuberechnung aller Zellen aus, deren Formel direkt oder indirekt auf diese Zelle verweist – und auch dort muss, intern, in topologischer Reihenfolge neu gerechnet werden.
Sketch Geometrie-Editor