Geometrische Operatoren
Die geometrischen Operatoren bieten High-Level-Zugriff auf mehrere elementare geometrische Operationen. Sie können entweder direkt auf Objekte der geometrischen Konstruktion oder auf Vektoren (Listen von Zahlen) angewendet werden, die die Koordinaten für die geometrischen Objekte darstellen. Wenn der Operator ein geometrisches Objekt zurückgibt, kann es auch direkt mit dem draw-Operator gezeichnet werden.
Listen und Koordinaten¶
Koordinaten für Linien sind immer homogene Koordinaten (d.h. eine Liste von drei Zahlen, die die Parameter [a,b,c] der Linie mit Gleichung a∗x+b∗y+c=0 sind). Koordinaten von Punkten können entweder euklidisch (Liste von zwei Zahlen [x,y]) oder homogen (Liste von drei Zahlen [x,y,z], die den Punkt [x/z,y/z] darstellen) sein. Rückgabewerte sind immer in homogenen Koordinaten. Im Text unten bezeichnen wir punktartige Argumente als <point> und linienähnliche Argumente als <line>, ohne weiter zu erwähnen, dass die Koordinaten der oben beschriebenen Art sein müssen.
Da beide Objekttypen <point> und <line> als Listen von drei Zahlen dargestellt werden können, braucht man eine Möglichkeit, diese beiden Fälle zu unterscheiden. Intern hat eine Liste Flaggen, die angeben, ob sie eine innewohnende geometrische Bedeutung hat. Man kann den Operator geotype(<list>) abfragen, um diese Information zu erhalten. Dieser Operator gibt entweder "Point", "Line" oder "None" zurück. Wenn ein solcher Vektor eine innewohnende geometrische Bedeutung hat, wird der draw-Operator ihn automatisch als solches Objekt rendern.
Elementare geometrische Operatoren¶
Schnittmenge zweier Linien: meet(<line1>,<line2>)¶
Beschreibung: Dieser Operator berechnet die Schnittmenge zweier Linien. Er gibt einen Punkt in homogenen Koordinaten zurück.
Verbindung zweier Punkte: join(<point1>,<point2>)¶
Beschreibung: Dieser Operator berechnet die Linie, die zwei Punkte verbindet. Das Ergebnis ist eine Linie in homogenen Koordinaten.
Berechnung einer Parallelen: parallel(<point>,<line>)¶
Berechnung einer Parallelen: parallel(<line>,<point>)¶
Beschreibung: Dieser Operator nimmt einen Punkt und eine Linie als Eingabe (egal in welcher Reihenfolge) und berechnet die Linie parallel zur Eingabelinie und durch den Eingabepunkt. Die vom Operator zurückgegebene Linie wird wieder in homogenen Koordinaten dargestellt. Dieser Operator bezieht sich auf euklidische Geometrie. Hyperbolische und sphärische Berechnungen werden nicht unterstützt. Dieser Operator kann auch mit para(...) abgekürzt werden.
Berechnung einer orthogonalen Linie: perpendicular(<point>,<line>)¶
Berechnung einer orthogonalen Linie: perpendicular(<line>,<point>)¶
Beschreibung: Dieser Operator nimmt einen Punkt und eine Linie als Eingabe (egal in welcher Reihenfolge) und berechnet die Linie orthogonal zur Eingabelinie und durch den Eingabepunkt. Die vom Operator zurückgegebene Linie wird wieder in homogenen Koordinaten dargestellt. Dieser Operator bezieht sich auf euklidische Geometrie. Hyperbolische und sphärische Berechnungen werden nicht unterstützt. Dieser Operator kann auch mit perp(...) abgekürzt werden.
Kombiniertes Beispiel: Der folgende Code erstellt das untenstehende Bild. Beachten Sie, dass der Operator eine implizite Typisierung der Rückgabewerte erzeugt, so dass die Objekte automatisch korrekt gerendert werden.
A=[1,1];
B=[2,5];
C=[7,2];
a=join(B,C);
b=join(C,A);
c=join(A,B);
ha=perpendicular(A,a);
hb=perpendicular(B,b);
hc=perpendicular(C,c);
X=meet(ha,hb);
drawall([a,b,c,d,ha,hb,hc,X,A,B,C]);

Berechnung eines orthogonalen Vektors: perpendicular(<list>)¶
Beschreibung: Wenn der perp-Operator mit einem Argument aufgerufen wird, nimmt er an, dass die Eingabeliste aus zwei Zahlen besteht. Eine solche Liste [a,b] wird von diesem Operator in die Liste [-b,a] konvertiert, die der Eingabevektor um 90° um den Ursprung gedreht ist.
Die Fläche eines Dreiecks: area(<point1>,<point2>,<point3>)¶
Beschreibung: Dieser Operator berechnet die (orientierte) Fläche des Dreiecks, das durch die drei Scheitelpunkte <point1>, <point2> und <point3> gebildet wird. Wenn die Orientierung der Punkte gegen den Uhrzeigersinn ist, ist die Fläche positiv, während sie bei Uhrzeigersinn negativ ist. Wenn die drei Punkte kollinear sind, ist die Fläche null.
Nützliche Operatoren der linearen Algebra¶
Die folgenden Operatoren aus der linearen Algebra sind sehr nützlich in geometrischen Kontexten. Sie gelten besonders für numerische Vektoren der Länge 3. Für andere nützliche Operatoren in diesem Kontext (wie dist, Matrixoperationen und Skalarprodukt) verweisen Sie bitte auf Vektoren und Matrizen.
Die Determinante von drei Punkten: det(<vec1>,<vec2>,<vec3>)¶
Beschreibung: Dieser Operator berechnet die Determinante einer 3 × 3 Matrix, die aus den drei dreidimensionalen Vektoren <vec1>, <vec2>, <vec3> gebildet wird. Im Gegensatz zur allgemeinen Determinantenmethode, die im Abschnitt Vektoren und Matrizen beschrieben ist, ist diese Methode für Leistung optimiert.
Das Kreuzprodukt zweier Punkte: cross(<vec1>,<vec2>)¶
Beschreibung: Dieser Operator nimmt zwei dreidimensionale Vektoren und berechnet ihr Kreuzprodukt. Das Kreuzprodukt ist ein dreidimensionaler Vektor, der orthogonal zu den beiden anderen Vektoren ist.
Konvertierung und Typisierung¶
Der Typ eines Objekts: geotype(<list>)¶
Beschreibung: Dieser Operator bestimmt, ob ein Objekt eine explizite geometrische Bedeutung hat. Er gibt eine Zeichenkette zurück, die entweder "POINT", "LINE" oder "NONE" ist.
Die Anwendung dieses Operators auf eine Liste von zwei Zahlen gibt immer "Point" zurück. Die Anwendung dieses Operators auf eine Liste von drei Zahlen gibt "Point", "Line" oder "None" zurück, je nachdem, ob die interne Bedeutung dieser Liste auf "Point" oder "Line" gesetzt ist. Werte, die von geometrischen Objekten einer Cinderella-Konstruktion stammen, erhalten immer den entsprechenden geometrischen Typ. Die Ausgabe des meet-Operators ist immer ein "Point". Die Ausgabe der Operatoren join, parallel und perpendicular ist immer eine "Line". Darüber hinaus kann die geometrische Bedeutung explizit mit den Operatoren line und point gesetzt werden.
Punkte deklarieren: point(<vec>)¶
Beschreibung: Dieser Operator setzt explizit den geometrischen Typ eines Vektors von drei Zahlen auf "Point". Wenn das Argument keine Liste von drei Zahlen ist, hat der Operator keine Auswirkung.
Linien deklarieren: line(<vec>)¶
Beschreibung: Dieser Operator setzt explizit den geometrischen Typ eines Vektors von drei Zahlen auf "Line". Wenn das Argument keine Liste von drei Zahlen ist, hat der Operator keine Auswirkung.
Punkte zu komplexen Zahlen: complex(<point>)¶
Beschreibung: Dieser Operator nimmt einen Punkt und konvertiert ihn in eine komplexe Zahl. Hier wird das übliche Koordinatensystem der euklidischen Ebene mit der gaußschen komplexen Ebene identifiziert. Der Punkt [x,b] wird in die komplexe Zahl a+i∗b konvertiert.
Komplexe Zahlen zu Punkten: gauss(<point>)¶
Beschreibung: Dieser Operator ist das Gegenteil des vorherigen. Er konvertiert eine komplexe Zahl a+i∗b in eine Liste von zwei Zahlen [a,b].
Querverhältnis von vier Punkten oder Linien: crossratio(<vec>,<vec>,<vec>,<vec>)¶
Beschreibung: Berechnet das geometrische Querverhältnis von vier Punkten. Wenn die vier Punkte kollinear sind, wird das übliche Querverhältnis in der echten projektiven Ebene berechnet. Wenn die Punkte nicht kollinear sind, wird das Querverhältnis der entsprechenden Punkte in der komplexen projektiven Linie berechnet. Für kollineare endliche Punkte stimmen diese beiden Ergebnisse überein.
Querverhältnis von vier Zahlen: crossratio(<numb>,<numb>,<numb>,<numb>)¶
Beschreibung: Berechnet das Querverhältnis (A/B)/(C/D) von vier reellen oder komplexen Zahlen. Eine äußerst nützliche geometrische Invariante.
Geometrische Transformationen und Basen¶
Man kann sich mit geometrischen Transformationen auf einer expliziten algebraischen Ebene befassen. Transformationen werden am besten durch 3 × 3 Matrizen dargestellt. Eine reale Transformation entspricht einer Matrixmultiplikation der homogenen Koordinaten eines Punktes mit der entsprechenden Transformationsmatrix. Es gibt mehrere Operatoren zur Berechnung dieser Transformationsmatrizen.
Spiegelung an einer Linie: linereflect(<line>)¶
Beschreibung: Gibt eine Matrix zurück, die eine Spiegelung in der Linie <line> darstellt.
Beispiel: Der folgende Code nimmt die Linie a, erstellt die Spiegeltransformation und bildet den Punkt C ab, indem seine homogenen Koordinaten mit der Matrix multipliziert werden. Das Ergebnis ist der grüne Punkt in der Abbildung.

Spiegelung an einem Punkt: pointreflect(<point>)¶
Beschreibung: Gibt eine Matrix zurück, die eine Spiegelung im Punkt <point> darstellt.
Verschiebung: map(<point1>,<point2>)¶
Beschreibung: Gibt eine Matrix zurück, die eine Verschiebung darstellt, die <point1> zu <point2> abbildet.
Ähnlichkeit: map(<point1>,<point3>,<point2>,<point4>)¶
Beschreibung: Gibt eine Matrix zurück, die eine Ähnlichkeit darstellt, die <point1> zu <point2> und <point3> zu <point4> abbildet.
Affine Transformation: map(<point1>,<point3>,<point5>,<point2>, <point4>,<point6>)¶
Beschreibung: Gibt eine Matrix zurück, die eine affine Transformation darstellt, die <point1> zu <point2>, <point3> zu <point4> und <point5> zu <point6> abbildet.
Projektive Transformation: map(<point1>,<point3>,<point5>,<point7>, <point2>,<point4>,<point6>,<point8>)¶
Beschreibung: Gibt eine Matrix zurück, die eine projektive Transformation darstellt, die <point1> zu <point2>, <point3> zu <point4>, <point5> zu <point6> und <point7> zu <point8> abbildet.
Diese Seite wurde automatisch mit KI (Claude) übersetzt und wartet noch auf Überprüfung.
→ Alle KI-übersetzten Seiten