Zum Inhalt

Zugriff auf geometrische Elemente

Die Hauptkommunikation zwischen CindyScript und dem Geometrie-Teil von Cinderella wird durch den Zugriff auf die geometrischen Objekte einer Konstruktion erreicht. Geometrische Elemente können auf zwei verschiedene Arten zugegriffen werden: Entweder kann man auf ein Element über den Namen seines Labels zugreifen, oder man kann über spezielle CindyScript-Operatoren auf Listen von Elementen zugreifen. Die Interaktion zwischen Cinderella und CindyScript ermöglicht es CindyScript, im Wesentlichen alle Eigenschaften der Elemente einer geometrischen Konstruktion zu lesen. Die meisten Eigenschaften können auch von CindyScript aus gesetzt werden. In den folgenden Abschnitten werden zunächst die möglichen Wege zur Adressierung von geometrischen Objekten beschrieben, gefolgt von einer detaillierten Liste der unterstützten Eigenschaften.

Zugriff auf Elemente über ihre Namen

Jedes Element in einer geometrischen Konstruktion hat einen eindeutigen Namen, sein Label. Dieser Name kann als Handle in CindyScript verwendet werden. Formal spielen Elemente in CindyScript die Rolle einer vordefinierten Variablen. Die verschiedenen Eigenschaften können über den . -Operator (Punkt-Operator) gelesen und gesetzt werden. Beispielsweise setzt die folgende Codezeile

A.size=20

die Größe des Punktes A in einer Konstruktion auf den Wert 20. Wenn ein Punkt oder eine Linie in einem arithmetischen Operator ohne Punkt-Operator enthalten ist, wird sie automatisch in einen Vektor konvertiert, der ihre Position darstellt. Ein Punkt wird also in einen [x,y]-Vektor konvertiert, der seine zweidimensionalen Koordinaten darstellt. Eine Linie wird in einen [x,y,z]-Vektor konvertiert, der ihre homogenen Koordinaten darstellt. Wenn man allerdings die Koordinaten eines Punktes setzen möchte, muss man den Punkt-Operator explizit verwenden. Wenn ein Handle zu einem geometrischen Objekt nicht in einem arithmetischen Ausdruck verwendet wird, wird es trotzdem als geometrisches Objekt an die Berechnung übergeben. Da diese Konzepte etwas subtil sind, werden wir sie mit einigen Beispielen verdeutlichen.

Angenommen, A, B und C sind Punkte in einer Cinderella-Konstruktion. Die Zeile

A.xy=(B+C)/2

setzt den Punkt A auf den Mittelpunkt von B und C. Diese zwei Punkte sind in einem arithmetischen Ausdruck enthalten, daher werden sie sofort in einen [x,y]-Vektor konvertiert. Das Setzen der Position von Punkt A muss durch explizite Verwendung der .xy-Eigenschaft erfolgen.

Das folgende Programm setzt die Farbe aller drei Punkte auf Grün:

pts=[A,B,C];
forall(pts,p,
  p.color=[0,1,0];
)

In diesem Code werden die Punkt-Namen als Handles an die Liste pts übergeben. Beim Durchlaufen der Liste mit dem forall-Operator werden diese Handles nacheinander in die Variable p eingefügt, von der ihre Farb-Eigenschaft zugegriffen wird.

Listen von Elementen

Manchmal ist es nicht notwendig, auf Punkte einzeln über ihre Namen zuzugreifen. Insbesondere passiert das, wenn man eine Operation auf alle Punkte in einer Konstruktion durchführen möchte. Das kann z.B. passieren, wenn man die konvexe Hülle einer Punktmenge berechnen möchte. Dafür stellt CindyScript mehrere Operatoren bereit, die Listen von Elementen zurückgeben. Beispielsweise gibt der Operator allpoints() eine Liste aller Punkte einer Konstruktion zurück. Wir werden dies mit einem sehr kleinen Beispiel demonstrieren. Das folgende Programm ändert die Farbe der Punkte je nach ihrer Position relativ zur y-Achse:

pts=allpoints();
forall(pts,p,
  if(p.x<0,
    p.color=[1,1,0],
    p.color=[0,1,0];
   )
)

Das folgende Bild zeigt die Anwendung des Codes auf eine zufällige Sammlung von Punkten.


Arbeiten mit Listen von Punkten

Eigenschaften von geometrischen Objekten

Wir beginnen nun mit einer vollständigen Beschreibung aller Eigenschaften, die derzeit über CindyScript zugänglich sind. Jede Eigenschaft ist mindestens lesbar. Für jede Eigenschaft listen wir den Typ des erwarteten Wertes, ob sie schreibgeschützt oder auch beschreibbar ist, und eine kurze Beschreibung ihres Zwecks auf. Die möglichen Eigenschaftstypen sind normalerweise wie folgt:

  • real: eine reelle Zahl
  • int: eine Ganzzahl
  • bool: entweder true oder false
  • string: eine Zeichenfolge
  • 2-vector: ein zweidimensionaler Vektor
  • 3-vector: ein dreidimensionaler Vektor
  • 3x3-matrix: eine 3×3-Matrix

Einige Eigenschaften, wie die aktuelle Position, sind nur für freie Objekte beschreibbar. Wir kennzeichnen dies durch das Wort „free" in der entsprechenden Spalte.

Eigenschaften, die allen geometrischen Objekten gemeinsam sind
Name Beschreibbar Typ Zweck
color ja 3-vector Der (Rot-, Grün-, Blau-)Farbvektor des Objekts
colorhsb ja 3-vector Der (Farbton, Sättigung, Schwarz-)Farbvektor des Objekts
isshowing ja bool Ob das Objekt angezeigt wird (wird von allen abhängigen Elementen geerbt)
visible ja bool Ob das Objekt angezeigt wird (wird nicht von abhängigen Objekten geerbt)
alpha ja real Die Opazität des Objekts (zwischen 0,0 und 1,0)
labelled ja bool Ob das Objekt sein Label zeigt
name nein string Das Label des Objekts
caption ja string Eine Beschriftung, die den Namen ersetzen kann
trace ja bool Ob das Objekt eine Spur hinterlässt
tracelength ja int Die Länge der Spur
selected ja bool Ob das Objekt derzeit ausgewählt ist

Jedes geometrische Element hat einen eindeutigen Namen. Die Zeichenfolge, die diesen Namen darstellt, kann über .name zugegriffen werden. Beispielsweise gibt A.name die Zeichenfolge "A" zurück. Der Name kann nicht identisch mit der Beschriftung des Elements sein, die in der Konstruktion angezeigt wird. Wenn A.caption die leere Zeichenfolge ist, wird der Name angezeigt, ansonsten die Beschriftung.

Eigenschaften von Punkten
Name Beschreibbar Typ Zweck
x free real Die x-Koordinate des Punktes
y free real Die y-Koordinate des Punktes
xy free 2-vector Die xy-Koordinaten des Punktes
coord free 2-vector Die xy-Koordinaten des Punktes
homog free 3-vector Die homogenen Koordinaten des Punktes
angle free real Gilt nur für PointOnCircle-Objekte. Der Winkel des Punktes auf dem Kreis
size ja int Die Größe des Punktes (0..40)
imagerot ja real Ein Rotationswinkel, wenn der Punkt mit einem Bild versehen ist
Eigenschaften von Linien
Name Beschreibbar Typ Zweck
homog free 3-vector Die homogenen Koordinaten der Linie
angle free real Der Winkel der Linie
slope free real Die Steigung der Linie
size ja int Die Größe der Linie (0..10)
Eigenschaften von Kreisen und Kegelschnitten
Name Beschreibbar Typ Zweck
center nein real Der Mittelpunkt des Kreises
radius free real Der Radius des Kreises
matrix nein real Die Matrix, die die quadratische Form des Kreises oder des Kegelschnitts beschreibt
size ja int Die Größe der Randlinie (0..10)
Eigenschaften von Texten
Name Beschreibbar Typ Zweck
text ja string Der Inhalt des Textes
pressed ja boolean Der Status dieses Textes, wenn er ein Button ist
xy ja 2-vector Die Position des Textes
Eigenschaften von Animationen
Name Beschreibbar Typ Zweck
run ja bool Ob die Animation läuft
speed ja real Die relative Animationsgeschwindigkeit
Eigenschaften von Transformationen
Name Beschreibbar Typ Zweck
matrix nein 3x3 matrix Die homogene Matrix der Transformation
inverse nein 3x3 matrix Die homogene Matrix der inversen Transformation

Eigenschaften von CindyLab-Objekten

Es sind nicht nur geometrische Eigenschaften, auf die über CindyScript zugegriffen werden kann. Die Simulationsparameter von CindyLab-Konstruktionen können auch über CindyScript gelesen und manchmal gesetzt werden.

Eigenschaften aller CindyLab-Elemente
Name Beschreibbar Typ Zweck
simulate ja bool Ob das Objekt an der Physik-Simulation teilnimmt oder vernachlässigt wird
Eigenschaften von Massen
Name Beschreibbar Typ Zweck
mass ja real Die Masse des Objekts
charge ja int Die Ladung des Objekts
friction ja real Die individuelle Reibung des Objekts
radius ja real Der Radius, wenn die Masse als Kugel behandelt wird
posx ja real Die x-Komponente der Position der Masse
posy ja real Die y-Komponente der Position der Masse
pos ja 2-vector Der Positionsvektor der Masse
vx ja real Die x-Komponente der Geschwindigkeit
vy ja real Die y-Komponente der Geschwindigkeit
v ja 2-vector Der Geschwindigkeitsvektor
fx nein real Die x-Komponente der auf das Partikel wirkenden Kraft
fy nein real Die y-Komponente der auf das Partikel wirkenden Kraft
f nein 2-vector Der Kraftvektor, der auf das Partikel wirkt
kinetic nein real Die kinetische Energie des Partikels
ke nein real Die kinetische Energie des Partikels

Manchmal ist man interessiert, ein benutzerdefiniertes Kraft-Potential zwischen Massen hinzuzufügen. Das kann durch die Programmierung eines geeigneten Code-Stücks im Integeration Tick-Event erfolgen. Da intern die Position von Massen eine feinere Zeitskala hat als die übliche geometrische Bewegung, ist es notwendig, auf ihre Position über die Accessoren pos, posx und posy zuzugreifen.

Eigenschaften von Federn und Coulomb-Kräften
Name Beschreibbar Typ Zweck
l nein real Die aktuelle Länge der Feder
lrest nein real Die Ruhelänge der Feder
ldiff nein real Der Abstand zur Ruhelänge der Feder
strength ja real Die Federkonstante
f nein real Der Kraftvektor, verursacht durch die Feder
amplitude ja real Die Amplitude für die Betätigung
speed ja real Die Geschwindigkeit für die Betätigung
phase ja real Die Phase für die Betätigung (zwischen 0,0 und 1,0)
potential nein real Die potenzielle Energie in der Feder
pe nein real Die potenzielle Energie in der Feder
Eigenschaft für Geschwindigkeiten
Name Beschreibbar Typ Zweck
factor ja real Der Multiplikationsfaktor zwischen graphischer Darstellung und tatsächlicher Geschwindigkeit
Eigenschaften der Gravitation
Name Beschreibbar Typ Zweck
strength ja real Die Stärke des Gravitationsfeldes
potential nein real Die potenzielle Energie aller Massen im Gravitationsfeld
pe nein real Die potenzielle Energie aller Massen im Gravitationsfeld
Eigenschaften von Sonnen
Name Beschreibbar Typ Zweck
mass ja real Die Masse der Sonne
potential nein real Die potenzielle Energie aller Massen im Sonnenfeld
pe nein real Die potenzielle Energie aller Massen im Sonnenfeld
Eigenschaften von Magnetfeldern
Name Beschreibbar Typ Zweck
strength ja real Die Stärke des Magnetfeldes
friction ja real Die Reibung im Magnetfeld
Eigenschaften von Prellern und Böden
Name Beschreibbar Typ Zweck
xdamp ja real Dämpfung in der x-Richtung
ydamp ja real Dämpfung in der y-Richtung
Eigenschaften der Umgebung

Die Umgebung kann durch den integrierten Operator simulation() zugegriffen werden. Die folgenden Slots der Umgebung können zugegriffen werden:

Name Beschreibbar Typ Zweck
gravity ja real Die globale Gravitation
friction ja real Die globale Reibung
kinetic nein real Die Gesamtkinetische Energie
ke nein real Die Gesamtkinetische Energie
potential nein real Die Gesamtpotenzielle Energie
pe nein real Die Gesamtpotenzielle Energie

Inspizieren von Elementen

Sie können auch die generische CindyScript-Funktion inspect(<element>) verwenden, um auf alle Attribute zuzugreifen, die im Inspector verfügbar sind. Wenn beispielsweise ein Punkt A in der Konstruktion existiert, gibt die Funktion

inspect(A)

das Array von Zeichenfolgen

[name,definition,color,visibility,drawtrace,tracelength,
traceskip,tracedim,render,isvisible,text.fontfamily,
pinning,incidences,labeled,textsize,textbold,textitalics,
ptsize,pointborder,printname,point.image,
point.image.rotation,freept.pos]

zurück.

Mit der zweiparametrigen Form inspect(<element>,<string>) können Sie alle Attribute von A, die im obigen Array aufgelistet sind, lesen:

inspect(A,"text.fontfamily")

gibt

SansSerif

zurück.

Mit der dreiparametrigen Form inspect(<element>,<string>,<expr>) können Sie auch die Attribute setzen, die nicht schreibgeschützt sind (beispielsweise können Sie die Liste der Inzidenzen oder die Definition eines Elements nicht ändern). Die folgende Funktion setzt die Schriftart von A auf eine Serif-Schriftart:

inspect(A,"text.fontfamily","Serif")

Der inspect-Befehl ist sehr leistungsstark, da Sie alle Aktionen, die Sie normalerweise mit der Maus im Inspector durchführen müssen, automatisieren können. Außerdem gibt er Ihnen feinkörnige Kontrolle über alle Eigenschaften.


Ein Benutzerattribut setzen: attribute(<geo>,<string1>,<string2>)

Beschreibung: Setzt das Benutzerattribut von , das durch identifiziert wird, auf den Wert .

Ein Benutzerattribut lesen: attribute(<geo>,<string>)

Beschreibung: Gibt das Benutzerattribut, das durch identifiziert wird, des geometrischen Elements zurück.

Beide Versionen der attribute-Funktion werden hauptsächlich für die Interaktion mit der Visage-Erweiterung verwendet.


Elemente erstellen und löschen

Ab Cinderella Version 2.1 können Sie auch Punkte dynamisch aus CindyScript erstellen. Die Funktion

p = createpoint("A",[4,6])

erstellt einen Punkt mit der Bezeichnung A bei den Koordinaten [4,6], sofern es nicht bereits ein Element A gibt. Wenn es existiert, wird es an die als zweites Argument angegebene Position verschoben. Der Wert der Funktion ist der Punkt oder das bereits vorhandene Element A. Dies bedeutet, dass wiederholte Ausführungen der Funktion für Ihren Code nicht schädlich sind - wenn Sie einen freien Punkt bei „A" benötigen, können Sie mit dem createpoint-Befehl sicherstellen, dass er existiert.

Mit der Funktion removeelement können Sie auch Elemente aus Ihrer Konstruktion entfernen. Beachten Sie, dass alle abhängigen Elemente ebenfalls entfernt werden. Die Funktion erwartet ein Element als Argument, daher können Sie entweder

removeelement(A)

oder

removeelement(element("A"))

verwenden, um das Element namens „A" zu entfernen.

Weitere Funktionen zum Erstellen beliebiger Elemente sind ebenfalls verfügbar und werden im Abschnitt über spezielle Operatoren diskutiert.


🤖 Diese Seite wurde automatisch mit KI (Claude) übersetzt und wartet noch auf Überprüfung. → Alle KI-übersetzten Seiten