Geometrisches Programmieren leicht gemacht

Seite 2: Beispiel

Inhaltsverzeichnis

Das folgende Problem lässt sich leicht in eine Aufgabenstellung der Geometrischen Algebra umformen und soll als Grundlage für ein vergleichsweise einfach zu programmierendes Beispiel dienen:

  1. Peter will einen Grill (s. Abb. 4) bauen.
  2. Er hat zwei Stangen (Längen 200 cm, 205 cm), die er an den Punkten P1 und P2 befestigen möchte. Sowohl die dritte Stange als auch die Kette hat er vergessen einzukaufen. An der Kette muss die Aufhängung der Grillplatte (Höhe von 20 cm) befestigt werden. Sie soll in einer Höhe von 40 cm hängen, um ein optimales Garen des Grillguts sicherzustellen.
  3. Heike befindet sich zur selben Zeit im Baumarkt, um Kohle, Grillanzünder und das noch fehlende Equipment zu kaufen. Eine dritte Stange (Länge 210 cm), die am Punkt P3 befestigt werden soll, hat sie bereits erworben.

Wie lang muss die Kette sein, die Heike kaufen muss, um einen Grill, der die oben genannten Eigenschaften aufweist, bauen zu können?

(Anmerkung: Die Stangen können weder gekürzt noch verlängert werden.)

Mathematische Veranschaulichung des Grills (Abb. 4)
//Alle Angaben in Meter

//Die Längen der Stangen
r1 = 2; r2 = 2.05; r3 = 2.1;


//Die Positionen der Befestigungen
x1 = 0;
y1 = 0;
x2 = 0.85;
y2 = 0.05;
x3 = 0.35;
y3 = 0.8;


//Zielhöhe
zh = 0.4;


//Aufhängungshöhe Grillplatte
aufh = 0.2;

//Erstelle drei Kugeln, deren Mittelpunkte die Aufstellpunkte
//der Stangen und deren Radien die Stangenlängen sind. Die Formeln
//zum Erstellen einer Kugel kann man der Tabelle der Abbildung 2
//entnehmen.

P1 = VecN3(x1,y1,0);
S1 = P1 - 0.5*r1*r1*einf;
P2 = VecN3(x2,y2,0);
S2 = P2 - 0.5*r2*r2*einf;
P3 = VecN3(x3,y3,0);
S3 = P3 - 0.5*r3*r3*einf;

// einf ist die Repräsentation des Basisvektors e_inf in CLUScript.
// Das Makro "VecN3" erstellt einen 3D-Vektor aus drei Koordinaten x,y,z


//Die drei Stangen aneinanderlehnen (Kugelschnitt), siehe dazu Abbildung 5

?Pp = S1^S2^S3;


//Bestimme den Aufhängungspunkt durch die Extraktion des ersten
//Punktes aus dem entstandenen Punktpaar

P4 = ExtractFirstPoint(Pp);


//Definiere die xy-Ebene (hat den Normalenvektor e3 in z-Richtung)

PlaneXY = e3;


//Berechne den Abstand zwischen xy-Ebene und Aufhängungspunkt

hoehe = PlaneXY.P4;


//Berechne die Kettenhöhe.
?kette = hoehe-zh-aufh;

Das Fragezeichen in der letzten Zeile deutet an, dass der Wert der nachfolgenden Variable explizit berechnet und ausgegeben werden soll. Ein Fragezeichen wird ebenso vor Pp verwendet, um die Ausgabe eines Zwischenergebnis an dieser Stelle zu erzwingen. Multivektoren, die ohne Fragezeichen deklariert sind, werden bei späterem Benutzen durch ihre rechte Seite ersetzt, bei Pp hingegen ist das nicht der Fall. Die nachfolgende Abbildung 5 veranschaulicht die Rechnungen im Skript visuell. Eine Dokumentation der Syntax von CLUScript ist in einer Anleitung von Christian Perwass [PDF] zu finden.

Dieses Bild zeigt die drei Kugeln aus dem Grillbeispiel. Der Schnittpunkt der drei Kugeln ist der Aufhängungspunkt der Kette (Abb. 5).