Formen - Cinderella Dokumentation
Description: The user's guide to the Interactive Geometry Software Cinderella

Zum Inhalt

# Formen

Neben elementaren Zeichenoperationen für Linien, Polygone und Kreise bietet CindyScript auch die Möglichkeit, diese Objekte zu komplizierteren Objekten, sogenannten Formen, zu kombinieren. Formen sind nicht direkt sichtbar, können aber zum Füllen, Umrisszeichnen oder Clipping verwendet werden. Sie können mit logischen Operationen wie Vereinigung, Schnittmenge oder Mengendifferenz kombiniert werden. Wir listen zuerst die elementaren Operatoren auf und erklären dann ihre Verwendung an einem ausführlicheren Beispiel.

### Grundformen

#### Eine Kreisform: `circle(<point>,<radius>)`

Beschreibung: Dieser Operator erstellt eine Kreisform mit einem gegebenen `<radius>` um einen gegebenen `<point>`.

#### Eine Polygonform: `polygon(<list>)`

Beschreibung: Dieser Operator erstellt eine Polygonform, die durch eine Liste von Positionen in `<list>` definiert wird.

#### Eine Halbebenenform: `halfplane(<line>,<point>)`

Beschreibung: Dieser Operator erstellt eine Halbebenenform. Die Halbebene wird durch ihre Trägerlinie `<line>` und einen in der Halbebene enthaltenen Punkt `<point>` definiert, der bestimmt, auf welcher Seite der Trägerlinie die Halbebene liegt. `<line>` kann entweder ein dreidimensionaler Vektor homogener Koordinaten oder eine Referenz auf ein Linienobjekt sein.

#### Die Form des Bildschirms: `screen()`

Beschreibung: Dieser Operator erstellt eine rechteckige Form, die groß genug ist, um alle aktiven Zeichenflächen abzudecken.

### Formen kombinieren

Grundformen können mit drei logischen Operatoren kombiniert werden, um neue Formen zu bilden.

`<shape1>++<shape2>` | erstellt die Vereinigung zweier Formen |
`<shape1>~~<shape2>` | erstellt die Schnittmenge zweier Formen |
`<shape1>--<shape2>` | erstellt die Differenz zweier Formen |

### Formen verwenden

Formen können zum Füllen, Umrisszeichnen und Clipping verwendet werden.

#### Eine Form füllen: `fill(<shape>)`

Beschreibung: Dieser Operator füllt eine Form mit einer angegebenen Farbe.

Modifikatoren: Dieser Operator unterstützt die folgenden Modifikatoren:

Modifikator | Parameter | Effekt
--- | --- | ---
`color` | `[<real1>,<real2>,<real3>]` | setzt die Füllfarbe auf einen RGB-Wert
`alpha` | `<real>` | setzt die Deckkraft auf den Wert `<alpha>`

#### Eine Form zeichnen: `draw(<shape>)`

Beschreibung: Dieser Operator zeichnet den Umriss einer Form.

Modifikatoren: Dieser Operator ist eine weitere polymorphe Erweiterung des üblichen Draw-Operators und unterstützt die gleichen Modifikatoren.

#### Clipping-Pfad setzen: `clip(<shape>)`

Beschreibung: Dieser Operator setzt den Clipping-Pfad auf die gegebene Form. Alle nachfolgenden Zeichenoperationen werden in Bezug auf diesen Clipping-Pfad beschnitten. Der Clipping-Pfad wird auf den Appearance-Stack verschoben, sodass er durch Anweisungen wie `grestore()` oder `greset()` wieder entfernt werden kann.

### Beispiele

Die folgenden Beispiele veranschaulichen die Verwendung von Formen. Der folgende Code definiert drei verschiedene Formen: eine quadratische und zwei kreisförmige. Diese werden dann mit logischen Operationen zu einer komplexeren Form kombiniert. Die komplexe Form wird gefüllt und umrissen. Die ursprünglichen Formen werden mit einer dünneren Linie umrissen.

    shape1=circle(E,4);
    shape2=circle(F,4);
    shape3=polygon([A,B,C,D]);
    color((0,0,0));
    shape=shape1++shape2++shape3;
    fill(shape,color->(1,0.8,0));
    draw(shape,size->3);
    draw(shape1);
    draw(shape2);
    draw(shape3);

Das resultierende Bild ist das erste Bild unten abgebildet. Die anderen drei Bilder werden mit anderen Kombinationen der Formen erstellt.

--- | ---
shape1++shape2++shape3 | shape1~~shape2~~shape3
shape1++shape2--shape3 | shape1++shape2~~shape3

Der folgende Code-Ausschnitt zeigt die Verwendung von Formen als Clipping-Pfad. Zunächst werden vier Kreise und ihre Vereinigung als eine Form definiert. Dann wird diese Form als Clipping-Pfad für eine weitere Zeichnung verwendet (konzentrische Kreise um den Punkt E).

    r=3;
    shape=circle(A,r)++circle(B,r)++circle(C,r)++circle(D,r);
    gsave();
    clip(shape);
    repeat(60,i,
      drawcircle(E,i/2,color->(0,.6,0),size->3);
    );
    greset();
    draw(shape,color->(1,1,1),size->2);

Formen können zu ziemlich komplizierten Objekten werden, wie das folgende iterative Beispiel zeigt. Ein Wort der Warnung mag hier angebracht sein: Je komplizierter die Formen werden, desto mehr Rechenressourcen verbrauchen sie. Die Verwendung von allzu komplexen Formen kann Cinderella erheblich verlangsamen.

    a=complex(A);
    b=complex(B);
    z=complex(C);
    shape=circle((0,0),0);
    repeat(50,
      shape=shape++circle(gauss(a),|a-b|);
      a=a*z;
      b=b*z;
    );
    fill(shape,color->(1,0.7,0));
    draw(shape,color->(0,0,0),size->2);

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