CindyScript Koordinatensystem
Das Koordinatensystem von CindyScript¶
Es gibt eine wichtige Funktion von CindyScript, die das Erscheinungsbild von Zeichnungen, die durch das Skript behandelt werden, auf kontrollierte und globale Weise sofort verändert. Normalerweise ist das Koordinatensystem von CindyScript das gleiche wie das Koordinatensystem der geometrischen Konstruktion. Es ist jedoch möglich, das Koordinatensystem durch spezielle Operatoren zu transformieren. Dann wird alle Zeichnung in Bezug auf dieses modifizierte Bezugssystem durchgeführt. Bei der Verwendung der Transformationen muss Vorsicht geboten werden: Wenn viele von ihnen angewendet werden, kann es schwierig sein zu bestimmen, wo eine tatsächliche Zeichnung durchgeführt wird. Um die Verwendung der Transformationsoperatoren immer noch einfach zu gestalten, stellt CindyScript zwei Operatoren gsave und grestore zur Verfügung. Ähnlich wie PostScript-ähnliche Sprachen pushen/poppen diese Operatoren den aktuellen Zustand der Zeichnungs-Engine auf einen Stack. Dieser Zustand enthält (neben der grafischen Standard-Erscheinungsinformation) die gegenwärtige Koordinatentransformation. So kann eine zeitliche Verwendung von Koordinatensystemen durch eine gsave()...grestore()-Konstruktion eingeschlossen werden. Wir führen zunächst die Operatoren ein und geben dann ein kombiniertes Beispiel.
Vorsicht: In der aktuellen Version von Cinderella 2.6 ist die Anwendung der Transformationen noch nicht für Kreise implementiert. Für Kreise werden nur euklidische Transformationen (Rotationen, Translationen, Spiegelungen, Skalierungen) unterstützt. Affine und projektive Transformationen werden in einer späteren Version bereitgestellt.
Verschiebung des Koordinatensystems: translate(<list>)¶
Beschreibung: Dieser Operator geht davon aus, dass <list> die Form [<real>,<real>] hat und verschiebt das Zeichenkoordinatensystem um diesen Vektor.
Drehung des Koordinatensystems: rotate(<real>)¶
Beschreibung: Dieser Operator nimmt eine reelle Zahl <real> und dreht das aktuelle Zeichenkoordinatensystem um einen durch diese Zahl bestimmten Winkel. Der Winkel wird in rad angegeben. Wenn man Winkel in Grad verwenden möchte, kann man dies mit dem ° Operator tun (dieser Operator multipliziert eine Zahl mit pi/180. So dreht rotate(30°) das Koordinatensystem um 30°.
Skalierung des Koordinatensystems: scale(<real>)¶
Beschreibung: Dieser Operator nimmt eine reelle Zahl <real> und skaliert das aktuelle Zeichenkoordinatensystem um diesen Faktor.
Beispiele: Die folgende Tabelle zeigt die Auswirkung der Anwendung verschiedener Transformationen vor dem Aufrufen eines Codes, der ein Quadrat mit Scheitelpunktkoordinaten [0,0],[0,1],[1,1],[1,0] zeichnet.

translate([1,0]); |
rotate(30°); |
scale(2)); |

Die folgende Tabelle zeigt verschiedene Kombinationen von Transformationen. Die Reihenfolge der Operationen mag ein wenig kontraintuiv erscheinen. Dies ergibt sich aus der Tatsache, dass die Operatoren das Koordinatensystem eher als die Objekte transformieren, die gezeichnet werden.
| --- | --- | --- |
| | | |
| translate([1,0]); rotate(30°); | rotate(30°); translate([-0.5,-0.5]); | rotate(30°); scale(2)); translate([-0.5,-0.5]); |
Rekursive oder iterierte Anwendung von Transformationen kann zu überraschenden Effekten führen. Das untenstehende Bild wurde durch das folgende Code-Stück generiert (vorausgesetzt, dass square eine Liste von Objekten ist, die das Einheitsquadrat zeichnen).
Diese Seite wurde automatisch mit KI (Claude) übersetzt und wartet noch auf Überprüfung.
→ Alle KI-übersetzten Seiten