Inhaltsverzeichnis

Befehle der Konstruktionssprache

Ignoriert werden Leerzeichen, Leerzeilen und Kommentare. Kommentare beginnen mit dem Zeichen # und enden mit dem Zeilenende. Alles was man sonst schreibt, wird als Definition eines Objektes interpretiert.

Enthält eine Definition ein =, so muss links davon ein gültiger Name stehen, rechts davon ein gültig definiertes Objekt, das dann diesen Namen erhält. Enthält die Definition kein =, wird ein Objekt erzeugt aber nicht benannt. Dies ist sinnvoll, wenn auf das erzeugte Objekt nur das eine Mal bei der Erzeugung Bezug genommen werden muss, wie es z.B. bei darstellenden Objekten der Fall ist.

In einer Zeile dürfen mehrere Definitionen stehen. Jede wird durch ein Semikolon ; beendet.

Jeder Name darf beliebig oft verwendet aber nur einmal definiert werden. Namen, die mit dem Unterstrich _ beginnen, sind für den internen Gebrauch reserviert und dürfen verwendet aber nicht definiert werden, weil sie schon definiert sind.

Zu den gültig definierten Objekten gehören Zahlen, Zeichenketten in (doppelten) Anführungszeichen, Objekte, die weiter unten noch einzeln aufgeführt werden und Listen daraus. Listen werden in geschweiften Klammern notiert. Elemente von Listen oder Parameterlisten werden durch Kommata getrennt.

Zahlen haben das in Programmiersprachen übliche Format (Dezimalpunkt, Zehnerexponent mit e), dürfen aber der Bequemlichkeit mit ° enden, was einer Multiplikation mit π/180 entspricht. Dies verwendet man üblicherweise bei Winkeln, das sind Zahlen, die mit < beginnen.

Eine gültige (wenn auch völlig sinnlose) Konstruktionsbeschreibung zeigt folgendes Beispiel:

 
A = Punkt(0,0); # Erzeugung und Benennung eines Punktes
str = {Farbe(1, 0.1, 0), Strich(1.5,{4,2,2,2})};
# Menge von 2 Objekten; Strich hat als Argument selber
# wieder eine Menge aus 4 Zahlen.
B = Punkt(6,-4.7e-1);
t = "ein schöner Text";
z = Zeichner(A);
# erzeugt eine Zeichnung von A und nennt sie z.
# Die Benennung des Zeichners ist wenig sinnvoll aber möglich.
g = Gerade(A,B); Zeichner(g,str);
# erzeugt eine Gerade und zeichnet sie.
# der Zeichner erhält hier keinen Namen.
k = Kr# gleich geht's weiter
eis(Punkt(20,30),A); #das ist hässlich aber möglich!
S = Schnitt(k,g);
w = <30°; # eine Abkürzung für 0.5235...
c = -5.01;

Besonderheiten im Konstruktionstext

Konstruktionen bestehen aus Punkten, Geraden und Kreisen, die sich mehr oder weniger häufig schneiden. Ist bei einem Schnitt ein Kreis beteiligt, so gibt es zwei Schnittpunkte. Um festlegen zu können, welcher von beiden gemeint sein soll, ist in den hier besprochenen Konstruktionstexten die Operation Schnitt nicht kommutativ, wenn also g und k eine Gerade und ein Kreis sind, ist Schnitt(g,k) der erste Schnittpunkt und Schnitt(k,g) der zweite. Die Begriffe 'erster' und 'zweiter' haben ihren Sinn, weil Geraden eine Richtung zugedacht wird. Z.B. hat die Gerade durch die Punkte A und B also Gerade(A,B) die Richtung von A nach B, und wenn man in dieser Fahrtrichtung vorgeht und auf einen Kreis trifft, trifft man ihn klar definiert das erste und dann das zweite Mal.

Ganz ähnlich verhält es sich beim Schnitt zweier Kreise k und h. Durch ihre Mittelpunkte ist eine Gerade vom erst- zum zweitgenannten definiert. Der erste Schnittpunkt ist dann jener auf der linken Seite der Fahrtrichtung, der zweite der auf der rechten.

Wenn man größere Konstruktionen durchführt, wird das Liniengewirr oft unübersichtlich. Um die Darstellung eines Objektes unabhängig vom Objekt handhaben zu können, gibt es spezielle Objekte, die nur zum Zeichnen der geometrischen Objekte dienen, sogenannte Zeichner. Will man ein Objekt auf der Zeichenfläche sehen, so muss man einen Zeichner anfordern, der das Objekt darstellt. Dem Zeichner kann man dann wieder mehr oder weniger aufwändig mitteilen, wie er das Ding darstellen soll.

Da ist also auf der einen Seite z.B. eine Gerade (unendlich dünn, unendlich lang, unsichtbar) und ein Zeichner, der sie mir hübsch darstellt (in blau, gestrichpunktet, mitteldick). Das macht natürlich eine Konstruktionsbeschreibung einigermaßen umständlich, aber darüber kann man an anderer Stelle streiten. Vielseitig ist dieser Weg allemal.

Erzeugbare Objekte

Am interessantesten ist natürlich die Frage, welche Objekte man denn auf welche Weise erzeugen kann.

Um die folgenden Ausführungen kurz halten zu können, nennen wir Kreise, Geraden und Punkte geometrische Objekte. Abstände und Zahlen sind Längen.

Es folgt eine Liste aller Objekte, die ich bisher programmiert habe, und die deshalb im Konstruktionstext vorkommen können. Die Liste besteht aus geometrischen Objekten und solchen, die für deren Darstellung gebraucht werden. Manche oft gebrauchten Objekte sind schon definiert, und zwar mit Namen, die für diese Zwecke reserviert sind: diese beginnen mit dem Unterstrich _.

Geometrische Objekte

Objekte für die Darstellung

Einige darstellende Objekte nehmen als Parameter eine Liste von Hints entgegen, die die Darstellung genauer definieren. Das Verhalten dieser Liste ist etwas ungewöhnlich. Weil sie nicht allzu kompliziert in der Verwendung werden sollte, wurde ein bisschen mehr syntaktischer Freiraum gewährt, als bei den anderen Objekten:

Bereits definierte, oft gebrauchte Objekte

Die hellen Farben _rot, _grün, _blau, _cyan, _magenta, _gelb und etwas dunkler _Rot, _Grün, _Blau, _Gelb, _Cyan, _Magenta, _Gelb, sowie die Grauabstufungen _weiß, _grau20, _grau40, _grau60 und _grau80.

Als Striche stehen zur Verfügung _s1, _s2, _s3, _s4, _s5, _dünn, _dick.

Um Kreismittelpunkte und Herkunftspunkte von Geraden anzuzeigen gibt es die Marke:_Punkt.

Als Spitze von Linienzügen und Vektoren gibt es _keine und _Pfeil.