Für Werner,
dem ich die Anregung für diese Ausarbeitung verdanke
Zunächst eine Pizza für den kleinen Hunger
Das Ausrollen einer Pizza stand für die Animation der nachfolgenden Grafik Pate.
So wie die Pizza bei gleich bleibender Teigmenge dünner und breiter wird,
so wird hier ein Quadrat beim Zusammendrücken bei gleichbleibender Fläche
niedriger und breiter bis es sich schließlich
in ein Rechteck im Seitenverhältnis des DIN-A-Formates verwandelt.
Die Idee
Der Maler Werner Goldmann
(hier seine Werke
werner-goldmann.de
)
- als Vermessungstechniker im Umgang mit Zirkel und Lineal vertraut -
stellte sich folgende Aufgabe:
Konstruiere euklidisch (mit Zirkel und Lineal)
aus einem Quadrat ein flächengleiches Rechteck
im DIN-A-Format (im Seitenverhältnis 1 zu Wurzel 2).
Die Originalzeichnung
Werner erstellte seine
Zeichnung,
mit Zirkel und Lineal auf Papier,
notierte darauf die Berechnungen
und stellte mir eine Fotografie zur Verfügung.
Werners Lösung
Die zwei wesentlichen Schritte sind
Ein Höhensatz-Dreieck mit p zu q im Verhältnis 1 zu Wurzel 2 erstellen
(h wird die lange Rechteckseite)
Im Höhenquadrat die halbe Diagonale k gewinnen
(k wird die kurze Rechteckseite)
Flächengleichheit (Bezeichner s. unten)
nach Vorgabe gilt \( q = \sqrt{2} \cdot p \)
nach Höhensatz gilt \( h^2 = p \cdot q = p \cdot \sqrt{2} \cdot p
= \sqrt{2} \cdot p^2 \)
somit \( h = \sqrt[4]{2} \cdot p \)
für die halbe Diagonale \( k \) gilt
\( k = \frac{1}{2} \cdot \sqrt{2} \cdot h
= \frac{1}{2} \cdot \sqrt{2} \cdot \sqrt[4]{2} \cdot p \)
für das konstruierte Rechteck gilt
\( k \cdot h = \frac{1}{2} \cdot \sqrt{2} \cdot h^2
= \frac{1}{2} \cdot \sqrt{2} \cdot \sqrt{2} \cdot p^2 = p^2\)
(Das ist auch die Fläche des Ausgangsquadrates)
Konstruiere Quadrat mit Seite AF und Punkten D, E.
Ziehe Gerade g durch Punkte A und F.
Schlage Kreis um F, der die Gerade g im Punkt B schneidet.
Errichte Thaleshalbkreis über AB.
Lot h zu Gerade g über F schneidet Thaleskreis im Punkt C.
Lot zu Gerade h im Punkt C
schneidet Kreis um Punkt C mit Radius = FC im Punkt G.
Punkt H halbiert Strecke FG.
(die Diagonale des Höhenquadrates)
Kreis um F mit Radius = FH
schneidet Strecke FB im Punkt I.
Punkt J vervollständigt das Ergebnis-Rechteck mit Punkten C, F, I.J
Mein bescheidener Anteil
Da mir zwei leistungsfähige Programmiersprachen,
das Skalierbares-Vektor-Grafik-Format SVG
sowie die Sprache Racapis mit ihrem SVG-Modul
und der Fähigkeit,
mit euklidischen Objekten rechnen zu können,
zur Verfügung standen,
war es mir eine Freude, Werners Konstruktion am PC
programmiersprachlich auszudrücken.
Hier der Quellkode als RECA-Datei.
Ein kurze Einführung in Recapis
Da die Programmiersprache Recapis ohnehin schon
mit rationalen Zahlen rechnen kann
(also Zahlen, die durch mehr als einen skalaren Wert repräsentiert werden)
a = Rational(1,2);
b = Rational(1,6);
$ = a+b; // gibt 2/3 aus statt üblich 0.6666667
brachte mich das auf die Idee,
euklidische Zahlen (Punkt, Gerade, Kreis) zu definieren
und mit praktisch nützlichen Operationen auszustatten.
Literale sind
P = Punkt(1,2); // Punkt an der Stelle x=1 und y=2
K = Kreis(1,2,10); // Kreis um Punkt (1,2) mit Radius 10
G = Gerade(1,m,n); // Gerade mit 1*y = m*x + n
Operationen sind
- Differenz (Abstand zwischen zwei Punkten)
+ verbindet Punkte zu einer Geraden
G = Punkt(1,2) + Punkt(99,2); // ergibt G = Gerade(1,0,2)
/ schneidet eine Gerade mit einer Geraden
P = Gerade(1,1,0) / Gerade(1,-1,1) // ergibt Schnittpunkt P = Punkt(1,1)
< schneidet Kreis < Gerade // Der Punkt mit kleinerm x-Wert
< schneidet Kreis < Kreis
> schneidet Kreis > Gerade // Der Punkt mit größerem x-Wert
> schneidet Kreis > Kreis
Regel: Wenn es zwei Schnittpunkte gibt,
meint der Operator '>' denjenigen Ergebnispunkt, der den größeren x-Wert hat.
Durch die Möglichkeit, komplexe Terme zu bilden,
müssen Zwischenergebnisse nicht als Variablen angelegt werden,
was den Kode kompakter und übersichtlicher macht.
Eine erste praktische Anwendung:
Der Punkt B soll sich als Schnittpunkt
der durch A und F gehenden Geraden
mit dem Kreis um F und dem Radius
der Diagonalen des Quadrates ergeben.
(Der Kode und die Grafik sind vielleicht leichter zu verstehen als dieser Text.)
Hier das vollständige Recapis-Programm 'erste.reca',
p = 30;
A = Punkt (-p, 0);
F = Punkt ( 0, 0);
D = Punkt (-p,-p);
E = Punkt ( 0,-p);
B = // Ergebnis ist B = Punkt(diagonale, 0)
Kreis(F,F-D) // Kreis um F mit Radius Abstand F von D
> // Kreis schneidet Gerade
(A+F) // Gerade durch A und F
;
svg_open(100,60,40,50);
svg_kreuz;
svg_polygon(A,D,E,F,'ff=lightgreen');
svg_bogen (F, F-D, 1.25*PI, 2*PI, "sf=red");
svg_punkt (A,"text=A");
svg_punkt (D,"text=D");
svg_punkt (E,"text=E");
svg_punkt (F,"text=F");
svg_punkt (B,"text=B");
svg_close "erste.svg";
das mit dem Konsolaufruf
recapis.exe sf=erste.reca
die folgende SVG-Datei 'erste.svg' produziert.
Nebenkonstruktionen
Diese Nebenkonstruktionen sind aus Gründn der Übersichtlichkeit
in Unterkonstruktionen ausgelagert
Außerdem verkürzen Unterprogramme bei mehrfacher Verwendung den Kode,
und innerhalb eines Ausdrucks erspart der Rückgabewert
die Verwaltung einer weiteren Variablen.
Lotrechte
Zunächst ausführlich:
Nun mit Unterprogramm:
Schlussbemerkung
Wenn der geneigte Leser dieses Artikels vermutet,
dass ich mit der Nachzeichnung nicht nur Werners Konstruktion
in ein schönes Licht setzen möchte,
sondern auch die Leistungsfähigkeit
des Werkzeuges Recapis demonstrieren möchte,
so liegt er damit richtig.