- Mathe
- Graphisch dargestellt
- Konstruktionen
- Üben
- Physik
- Optik
- Informatik
- Java
- Technische Informatik
- Tips
Dies ist eine alte Version des Dokuments!
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;
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.
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 _
.
Abstand(P,g)
bezeichnet den Abstand zwischen einem Punkt und einem
weiteren geometrischen Objekt. Die Reihenfolge der Argumente P
und
g
ist unwichtig. In klassischen Konstruktionen darf der Abstand nur
zwischen zwei Punkten gemessen werden (auf dem Papier tut man das mit dem
Zirkel).
Gegner(g)
ist die gleiche Gerade wie g aber mit entgegengesetzter Richtung.
Gerade(x,y,dx,dy)
ist eine Gerade durch den Punkt mit den Koordinaten
x
und y
und mit der Richtung dx
, dy
. Die
vier Argumente müssen Längen sein.
Gerade(P,V)
ist eine Gerade durch den Punkt P
mit dem
Richtungsvektor V
. V
ist ein Vektor.
Gerade(A,B)
ist eine Gerade durch die Punkte A
und B
.
Die Richtung geht von A
nach B
.
Gerade(A,w,g)
ist eine Gerade durch den Punkt A
unter
einem Winkel w
zur Geraden g
gegen den Uhrzeigersinn gemessen.
Gerade(A,w,B)
ist eine Gerade durch den Punkt A
unter
einem Winkel w
zur Geraden von A
nach B
gegen den
Uhrzeigersinn gemessen.
Kreis(x,y,r)
ist ein Kreis mit den Mittelpunktkoordinaten x
,
y
und dem Radius r
. Alle Argumente sind Längen.
Kreis(P,r)
ist ein Kreis um den Punkt P
und dem Radius
der Länge r
.
Kreis(A,B)
ist ein Kreis um den Mittelpunkt A
durch den
Punkt B
.
Lot(g,P)
ist das Lot auf die Gerade g
, das durch den Punkt
P
geht. Die Richtung des Lotes erhält man aus der Richtung von
g
, indem man diese um 90° gegen den Uhrzeigersinn dreht.
Mittelpunkt(P,Q)
ist der Mittelpunkt zwischen den beiden Punkte
P
und Q
.
Mittelsenkrechte(P,Q)
ist die Mittelsenkrechte zwischen den beiden
Punkten P
und Q
. Die Richtung der Mittelsenkrechten erhält
man, wenn man die Gerade PQ
um 90° gegen den Uhrzeigersinn dreht.
Parallele(g,P)
ist eine Parallele zur Geraden g
durch
den Punkt P
. Die Parallele hat die gleiche Richtung wie g
.
Parallele(g,d)
ist eine Parallele zur Geraden g
im Abstand
d
. Der Abstand ist eine Länge. Bei positiven Werten befindet
sich die Parallele links von g
, sonst rechts.
Punkt(x,y)
ist ein Punkt mit den Koordinaten x
, y
. Alle Argumente sind Längen.
Punkt(go)
ist ein Punkt am gleichen Ort wie das geometrische Objekt
go
.
PunktAuf(g,x,y)
ein beliebiger Punkt auf der Geraden g
.
Weil das Programm nicht wissen kann, wo der Punkt beliebt, wird mit x
,
y
eine Position in der Ebene angegeben, in deren Nähe der beliebige
Punkt sein soll. Die Position auf der Geraden ist nachträglich veränderbar.
PunktAuf(k,x,y)
ein beliebiger Punkt auf dem Kreis k
.
Weil das Programm nicht wissen kann, wo der Punkt beliebt, wird mit x
,
y
eine Position in der Ebene angegeben, in deren Nähe der beliebige
Punkt sein soll. Die Position auf dem Kreis ist nachträglich veränderbar.
PunktAuf(k,w)
ein beliebiger Punkt auf dem Kreis k
. Weil
das Programm nicht wissen kann, wo der Punkt beliebt, wird mit w
der Winkel gegen die Horizontale angegeben.
Schnitt(a,b)
ist der Schnittpunkt zwischen a
und b
. Bei diesen muss es sich um Kreise und/oder Geraden handeln.
VarPunkt(x,y)
wie Punkt(x,y)
jedoch mit der Möglichkeit, die Lage nachträglich zu verändern.
Vektor(dx,dy)
ein Vektor mit der Richtung dx
, dy
. Vektoren im strengen Sinne haben keinen Ort. Weil sie in Zeichnungen jedoch irgendwo erscheinen müssen, haben sie die Position, auf die ihre Spitze zeigt. Erzeugt man einen Vektor wie hier aus nur zwei Zahlen, so ist sein Fuß immer der Nullpunkt.
Vektor(p)
ein Vektor vom Ursprung zum angegebenen Punkt p
.Vektor(A,B)
ein Vektor von A
nach B
, wobei A
und B
Punkte oder Vektoren sind.
Vektor({v1,v2,…})
die Summe der angegebenen Vektoren. Die Position
wird so gelegt, dass der Fußpunkt der Summe der gleiche ist, wie der
Fußpunkt von v1
.
Vektor(a,v)
das a
-fache des Vektors v
. Mit a=-1 bekommt
man also z.B. den Gegenvektor. Der Fußpunkt ist derselbe wie der von
v
.
Vektor(v,a,w)
die Summe aus Vektor v
und a
mal
Vektor w
. Der Fußpunkt ist derselbe, wie der von v
.
Winkel(g,h)
ist der Winkel zwischen den beiden Gerade g
und h
. Er hat Werte zwischen -Pi und Pi und ist positiv, wenn die
(kürzere) Drehung von g
nach h
gegen den Uhrzeigersinn
verläuft.
Winkel(A,P,B)
ist der Winkel zwischen den Geraden PA
und
PB
.
Winkelhalbierende(g,h)
ist eine Gerade durch den Schnittpunkt der
Geraden g
und h
, die den Winkel dazwischen halbiert. Die
Reihenfolge der beiden Argumente ist bedeutungslos. Die anderen drei möglichen
Winkelhalbierenden bekommt man, wenn man Gegner(g)
bzw. Gegner(h)
geeignet verwendet.
Winkelhalbierende(A,P,B)
ist eine Gerade durch P
, die
den Winkel zwischen den Geraden PA
und PB
halbiert. Die
Vertauschung von A
und B
hat keine Auswirkungen.
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:
weggelassen werden.
Hintname:wirksamesObjekt
.
Der Hintname
sagt aus, worauf wirksamesObjekt
Einfluss nimmt.
Wie Hintname lauten muss, ist unten jeweils aufgeführt..
wird. Diese besonderen Hints dürfen dann auch ohne Hintname (und ohne
Doppelpunkt) angegeben werden. Sie werden allein auf Grund des Typs von wirksamesObjekt
erkannt.
ignoriert und so verfahren, als wäre er nicht genannt worden. So ist
z.B. der Hint Strichfarbe:"blau"
ein sinnloser Hint, weil
nach dem Doppelpunkt statt eines Strings eine Farbe definiert werden müsste,
also etwa Strichfarbe:Farbe(0,0,1)
oder Strichfarbe:_blau
.
Die Darstellung erfolgt in diesem Fall aber ohne Fehlermeldung in der Standardfarbe.
Namen. Hintnamen werden gesondert erkannt. Nach dem Doppelpunkt werden vernünftigerweise
selber definierte Namen als solche erkannt. Die Angabe Strichfarbe:blau
ist also sinnvoll, wenn vorher irgendwo definiert wurde blau=Farbe(…)
.
Farbe(r,g,b)
Farbe mit den drei Anteilen für Rot, Grün
und Blau. Die einzelnen Werte müssen Zahlen zwischen 0 und 1 sein. Je
größer die Werte sind, desto heller ist die Farbe. Sind alle drei
Werte 1, ist die Farbe Weiß gemeint.
Ohne Angabe der Farbe wird stets schwarz verwendet. Bereits definiert sind
die <a href=“#vordefiniert“>unten genannten</a> Farben.
Strich(d)
ein durchgezogener Strich der Dicke d
Points. Bereits definiert sind die <a href=“#vordefiniert“>unten genannten</a> Striche.
Strich(d,{s1,u1,s2,u2,…})
ein Strich der Dicke d
Points.
Der Stil des Strichs ist nicht durchgezogen, sondern bestehend aus: sichtbares
Stück der Strichlänge s1
, unsichtbares Stück der Unterbrechungslänge
u1
, usw. Wenn das Muster für den darzustellenden Strich nicht
reicht, wird es wiederholt.
Zeichner(go)
zeichnet ein geometrisches Objekt go
in standardisierter Weise, also mit Standardfarbe (schwarz), Standardstrichstärke (1 Point), Standardstil (durchgezogen).
Zeichner(go,hints)
zeichnet ein geometrisches Objekt go
unter Angabe weiterer Hinweise hints
. hints
kann alles sein,
was der Zeichner versteht. Im Moment wird unterstützt: Stiftfarbe:Farbe(…)
,
Stift:Strich(…)
und Marke:_Punkt
oder eine Liste aus diesen
Elementen. Der Eintrag _Punkt
bewirkt, dass bei Geraden angezeigt
wird, wo sie herkommen. Bei Kreisen bewirkt er die Anzeige des Mittelpunkts.
Bei Vektoren bewirkt der Eintrag
Spitze:_Pfeil
, dass ein Pfeil gezeichnet wird.Zeichner({g1,g2,…},hints)
zeichnet einen Linienzug durch die Positionen der angegebenen geometrischen Objekte. Üblicherweise wird man meist Punkte verwenden. Dadurch hat man also die Möglichkeit, Linien zu zeichnen, die nicht unendlich lang sind.
Anzeige(was,wo,hints)
schreibt einen Text in die Zeichnung. Der
Inhalt und das Aussehen werden größtenteils in den hints
festgelegt. Da aber fast immer ein Parameter dargestellt werden soll, muss
mit was
angegeben werden, von welchem Objekt. Da die meisten Objekte
mehrere Parameter haben, wird in einem Formatierungsstring in den hints
definiert, welcher Parameter gewünscht ist. Diese sind durchnummeriert
mit ganzen Zahlen ab 0. Mit wo
muss ein Objekt angegeben werden,
von dem dann die Koordinaten verwendet werden, um die Anzeige dort zu platzieren.
Vernünftigerweise nimmt man da meistens einen Punkt, den man selbst nicht
zeichnet.
In den hints können folgende Eintragungen gemacht werden:
Stiftfarbe:Farbe(…)
, Hintergrund:Farbe(…)
, dx:Zahl
,
dy:Zahl
und Format:String
Stiftfarbe
</tt>(und
Format sind Defaultangaben, d.h. der
Hintname darf weggelassen werden.)
dx
und
dy geben an, um wie viele Pixel die Anzeige von der
Position
wo entfernt erfolgen soll. Das hat den Zweck, dass man für
mehrere Anzeigen den gleichen Ort
wo verwenden kann, jedoch mit jeweils
verschiedenen Verschiebungen
dx oder
dy. Verändert
man dann die Lage von
wo, so wandern alle Anzeigen auf einmal mit.
A=Punkt(10,1)
Beispiel: Sei Dann bewirkt
Anzeige(A,A,{"(%0 #.##%|%1 #.##%)",dx:10,Stiftfarbe:Farbe(1,0,0),Hintergrund:Farbe(0,1,0)})\\
die Anzeige der Koordinaten des Punktes A in einer Entfernung von 10
Pixeln rechts von A in etwa folgender Weise: (1,13|-2,2)
%
Ein leitet ein Format ein. Danach folgt die Nummer des gewünschten
Parameters (im Beispiel 0 bzw. 1). Danach kann die Formatierung angegeben
werden. Ein weiteres
% beendet das Format und schaltet auf normale
Textwiedergabe. Daraus folgt, dass das Zeichen
% selber nicht darstellbar
ist. Deswegen dient es als Fehlermelder: Taucht es in der Ausgabe auf, so
heißt das, dass der Formatstring fehlerhaft ist. Verzichtet man ganz
auf die Angabe eines Formats, so wird ein Format verwendet, das am besten
zum verwendeten Objekt passt.
Anzeige(was,wo)
Bei eindimensionalen Größen, wie Längen und Winkeln ist Parameter
0 der Wert und Parameter 1 der Wert multipliziert mit 180/Pi (also der Wert
in Grad). Dies ist sinnvoll, wenn man Winkel in Grad angeben will. Bei zweidimensionalen
Objekten kommt erst die Position 0 für x, 1 für y und dann die Eigenheiten,
also bei Kreisen der Radius (2) und bei Geraden der Richtungsvektor (2 und
3) und der Drehwinkel im Bogen- und Gradmaß (4 und 5). Vektoren haben
noch als 6. Parameter ihre Länge.
Gibt man eine zu große Parameternummer an, so erhält man keinen
Wert.
* wie oben, aber mit Standardwerten für alles
was durch Hints definierbar ist.
*
Anzeige(wo,hints) dient der Anzeige eines Strings (deshalb entfällt
der Parameter
was). Der String muss bei den Hints mitgegeben werden
und darf benannt werden mit
Format:. Damit wird jedoch ein etwaiges
%-Zeichen nicht als Parameter gewertet, sondern als solches wiedergegeben.
Die anderen Hints funktionieren sinngemäß weiter.
===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''.