Interaction with geometry - Cinderella Dokumentation
Description: The user's guide to the Interactive Geometry Software Cinderella

Zum Inhalt

# Interaction with geometry

title: "Interaktion mit Geometrie" tags: - Geometrie

## Interaktion mit Geometrie

CindyScript kann auf verschiedene Arten mit einer geometrischen Zeichnung interagieren, die mit Cinderella erstellt wurde. Wir haben bereits gesehen, dass es die numerischen Daten und das Aussehen geometrischer Elemente lesen kann. Es kann jedoch auch die Position der freien Elemente einer Konstruktion verändern. CindyScript kann auch die Konstruktionsfolge abfragen und verändern, indem es neue geometrische Elemente erstellt und löscht.

### Verschieben von Elementen

Die Berechnungen in CindyScript können verwendet werden, um die Positionen freier Elemente in einer Cinderella-Konstruktion zu steuern. Eine Möglichkeit dazu besteht darin, die Positionsinformationen eines freien Elements explizit festzulegen. Wenn beispielsweise `A` ein freier Punkt ist, setzt die Zeile `A.xy=[1,1]` diesen Punkt auf die Koordinaten `[1,1]`. Eine weitere Möglichkeit, ein Element zu verschieben, ist der `moveto`-Operator.

#### Verschieben eines freien Elements: `moveto(<geo>,<pos>)`

Beschreibung: Bei diesem Operator ist `<geo>` ein freies geometrisches Objekt und `<pos>` (normalerweise ein Vektor) beschreibt eine Position, zu der dieses Objekt verschoben werden soll. Das Aufrufen dieses Operators simuliert eine Bewegung für dieses geometrische Objekt.

Wenn `<geo>` ein freier Punkt ist, dann kann `<vec>` eine Liste `[x,y]` von zwei Zahlen oder eine Liste `[x,y,z]` von drei Zahlen sein. Der erste Fall wird als euklidische Koordinaten interpretiert, während der zweite Fall als homogene Koordinaten interpretiert wird und den Punkt auf `[x/z,y/z]` setzt.

Wenn `<geo>` eine freie Linie ist, dann muss `<vec>` eine Liste von drei Zahlen `[a,b,c]` sein, und die Linie wird auf die durch die Gleichung `a∗x + b∗y + c = 0` beschriebene Linie gesetzt.

Beispiele: Die folgenden Codezeilen fassen mögliche Wege zusammen, um geometrische Elemente zu verschieben (wir beziehen auch die Möglichkeiten ein, Elemente durch Zugriff auf ihre Datenfelder zu verschieben):

    //A is a free point
    moveto(A,[1,4]);        //moves A to Euclidean coordinates [1,4]
    A.xy=[1,4];             //moves A to Euclidean coordinates [1,4]
    A.x=5;                  //sets the x coordinate of A to 5, lets the y coordinate unchanged
    A.y=3;                  //sets the y coordinate of A to 3, lets the x coordinate unchanged
    moveto(A,[2,3,2]);      //moves A to homogeneous coordinates [2,3,2]
    A.homog=[2,3,2];        //moves A to homogeneous coordinates [2,3,2]

    //a is a free line
    moveto(a,[2,3,4]);      //moves a to homogeneous coordinates [2,3,4]
    a.homog=[2,3,4];        //moves a to homogeneous coordinates [2,3,4]

    //b is a line through a point
    b.slope=1;              //sets the slope of the line to 1

    //C is a circle with free radius
    C.radius=1;             //sets the radius of the circle to 1

### Verweise auf Objekte

#### Wer hat sich bewegt: `mover()`

Beschreibung: Dieser Operator gibt einen Verweis auf das Element, das derzeit von der Maus verschoben wird.

#### Elemente in der Nähe der Maus: `elementsatmouse()`

Beschreibung: Dieser Operator gibt eine Liste mit Verweisen auf alle Elemente, die sich in der Nähe der aktuellen Mausposition befinden.

Beispiel: Das folgende Skript ist etwas gemein. Wenn Sie es in den Slot „Mausbewegung" einfügen, werden genau diese Elemente verschwinden, die sich in der Nähe der Maus befinden. Sie erscheinen wieder, wenn sich die Maus entfernt.

    apply(allelements(),#.alpha=1);
    apply(elementsatmouse(),#.alpha=0);
    repaint();

#### Inzidenzen eines Objekts: `incidences(<geo>)`

Beschreibung: Dieser Operator gibt eine Liste aller Elemente zurück, die generisch zu einem geometrischen Element `<geo>` inzident sind.

#### Abrufen eines Elements nach Name: `element(<string>)`

Beschreibung: Dieser Operator gibt das geometrische Objekt zurück, das durch den in `<string>` angegebenen Namen identifiziert wird.

Beispiel: Der `element`-Operator ist notwendig für Situationen, in denen der Elementname kein gültiger Variablenbezeichner ist oder bereits durch einen benutzerdefinierten oder integrierten Namen verwendet wird. Wenn Sie beispielsweise versuchen, auf die Farbe einer Linie zuzugreifen, die den Namen `i` hat, können Sie nicht `i.color=[1,1,1]` schreiben, da `i` für die komplexe Einheit reserviert ist. Stattdessen verwenden Sie:

    element("i").color=[1,1,1]

### Erstellen und Entfernen von Elementen

#### Erstellen eines freien Punkts: `createpoint(<string>,<pos>)`

Beschreibung: Dieser Operator erstellt einen neuen Punkt mit der Beschriftung `<string>`. Der Punkt wird auf die Position `<pos>` gesetzt. Wenn bereits ein Element mit diesem Namen existiert, wird kein neues Element erstellt. Wenn jedoch bereits ein freier Punkt mit diesem Namen existiert, wird dieser Punkt in die angegebene Position verschoben.

#### Erstellen eines geometrischen Elements: `create(<list1>,<string>,<list2>)`

Beschreibung: Mit diesem Operator ist es möglich, beliebige geometrische Elemente zu erzeugen, die in einer geometrischen Konstruktion funktionsfähig sind. Da Algorithmen mehrere Ausgaben erzeugen können, entstehen mehrere Feinheiten. Diese Funktion ist nur für Experten gedacht.

Die erste Liste enthält eine Liste `<list1>` von Elementnamen für die generierten Ausgabeobjekte des Algorithmus. `<string>` ist der interne Name des geometrischen Algorithmus. Die zweite Liste `<list2>` ist eine Liste der Parameter, die für die Definition erforderlich sind. Die folgende Tabelle zeigt einige mögliche Erstellungsanweisungen.

    create(["A"],"FreePoint",[[1,1,1]]);
    create(["B"],"FreePoint",[[4,3,1]]);
    create(["a"],"Join",[A,B]);
    create(["X"],"CircleMP",[A,B]);
    create(["Y"],"CircleMP",[B,A]);
    create(["P","Q"],"IntersectionCircleCircle",[X,Y]);
    create(["b"],"Join",[P,Q]);
    create(["M"],"Meet",[a,b]);

Diese Sequenz von Anweisungen erstellt die unten gezeigte vollständig funktionsfähige Konstruktion. Beachten Sie, dass in der sechsten Anweisung bei der Schnittmenge zweier Kreise eine Liste von zwei Ausgabeelementen angegeben werden muss.

Sie können die gültigen Parameter für Elemente ermitteln, indem Sie sie manuell konstruieren und die unten beschriebenen Funktionen `algorithm` und `inputs` verwenden.

#### Entfernen eines geometrischen Elements: `removeelement(<geo>)`

Beschreibung: Entfernt ein geometrisches Element zusammen mit allen seinen abhängigen Elementen aus einer Konstruktion.

#### Eingabeelemente eines Elements: `inputs(<geo>)`

Beschreibung: Dieser Operator gibt eine Liste aller Elemente zurück, die erforderlich sind, um das Objekt `<geo>` zu definieren. Dies können andere geometrische Elemente, Zahlen oder Vektoren sein.

#### Algorithmus eines Elements: `algorithm(<geo>)`

Beschreibung: Dieser Operator gibt eine Zeichenkette zurück, die dem Algorithmus der Definition des Objekts `<geo>` ähnelt.

Beispiel: Das folgende Code-Stück generiert alle in einer Konstruktionssequenz enthaltenen Informationen.

    els=allelements();
    data=apply(els,([[#.name],algorithm(#),inputs(#)]));

Angewendet auf die Konstruktion einer Mittelsenkrechten im folgenden Bild erzeugt es die folgende Ausgabe:

     [[["A"],"FreePoint",[[4,4,-4]]],
      [["B"],"FreePoint",[[4,-3,1]]],
      [["a"],"Join",[A,B]],
      [["C"],"Mid",[A,B]],
      [["b"],"Orthogonal",[a,C]]
    ]

### Zugriff auf Elementeigenschaften

Elementeigenschaften wie Farbe, Größe usw. sind bequem über Operatoren wie `.color`, `.size` usw. zugänglich. Elemente haben jedoch weitaus mehr Eigenschaften. Alle können generisch über die folgenden Operatoren zugegriffen werden.

#### Alle überprüfbaren Eigenschaften auflisten: `inspect(<geo>)`

Beschreibung: Gibt eine Liste der Namen aller privaten Eigenschaften eines geometrischen Elements zurück.

Beispiel: Der Operator `inspect(A)` angewendet auf den freien Punkt A gibt die folgende Liste von Eigenschaftsnamen zurück.

##

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

#### Zugriff auf eine überprüfbare Eigenschaft: `inspect(<geo>,<string>)`

Beschreibung: Greift auf eine beliebige überprüfbare Eigenschaft zu.

Beispiel: Man kann auf die Farbe eines Punktes A durch `inspect(A,"color")` zugreifen

#### Festlegen einer überprüfbaren Eigenschaft: `inspect(<geo>,<string>,<data>)`

Beschreibung: Festlegen des Werts einer überprüfbaren Eigenschaft.

Beispiel: Man kann die Farbe eines Punktes A auf Weiß setzen durch `inspect(A,"color",(1,1,1))`

#### Erzwingen einer Neuzeichnungsoperation: `repaint()`

Beschreibung: Dieser Operator verursacht eine sofortige Neuzeichnung der Zeichenoberfläche. Dieser Operator soll verwendet werden, wenn ein Skript eine Konstruktion aktualisiert hat und die Änderungen anzeigen möchte. Es ist nicht erlaubt, diesen Operator im `draw`- oder im `move`-Slot zu verwenden.

#### Erzwingen einer verzögerten Neuzeichnungsoperation: `repaint(<real>)`

Beschreibung: Wie `repaint`, aber mit einer Zeitverzögerung von so vielen Millisekunden wie durch den Parameter angegeben

#### Punkte auf einem Ort: `locusdata(<locus>)`

Beschreibung: Dieser Operator gibt eine Liste von Punkten in xy-Koordinaten zurück, die alle auf einem Ort liegen, der durch den Namen `<locus>` eines geometrischen Elements gegeben ist.

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