Zeichnen II
Draw-Schleife
Die Draw-Schleife stoppen
Wenn man z.B. zufällige Werte benutzt, dann will man häufig nicht, dass das Design andauernd neugezeichnet wird. Um die Draw-Funktion zu stopppen, gibt es das noLoop()
Kommando.
function draw() {
noLoop();
// your code
}
FrameRate
Normalerweise wird die Draw-Schleife ca. 60x pro Sekunde aufgerufen. Man kann die Geschwindigkeit aber auch verändern:
function setup() {
frameRate(10);
}
Die standardmäßge Framerate ist 60fs, complexe Zeichenabfolgen können die reale Framerate aber reduzieren. Für Animation, um diese z.B. in Filmen zu nutzen, sollte mindestens eine Framerate von 24fs erreicht werden.
Polygons
Nach all den abstrakten JavaScript Basics, zurück zum Zeichnen. Im Abschnitt zu den einfachen Formen, haben wir bereits Kreise, Rechtecke, etc. kennengelernt. All diese Formen bestehen aus Punkten, welche durch Linien verbunden werden und dadurch sogenannte Polygone formen. Die zugrundeliegenden Lininen können wir z.B. auch nutzen um eine Fräse oder einen Laser-Cutter zu kontrollieren. Fangen wir mit der Dekonstruktion eines einfachen Rechtecks an:
rect(0, 0, 40, 20);
point(0,0);
point(40,0);
point(40,20);
point(0,20);
Das Rechteck hat vier Eckpunkte. Wir könnten das Rechteck auch manuell erstellen:
beginShape();
vertex(0, 0);
vertex(40, 0);
vertex(40, 20);
vertex(0, 20);
endShape(CLOSE);
Mit dem Befehl beginShape();
sagen wir p5js, dass wir beginnen wollen eine neue Form zu zeichnen. Danach können wir beliebig viele vertex(x, y)
Kommandos absetzen. x
und y
sind die Koordinaten wo die nächste Linie hingehen soll. Wenn die Form abgeschlossen ist, können wir den Zeichenprozess mit endShape();
abschließen. Wenn wir bei dieser Funktion CLOSE
als Parameter übergeben, sagen wir p5js, dass der letzte Punkt mit dem ersten verbunden werden soll.
Wenn man komplexere Formen erstellt, sollte man darauf achten, dass die Punkte im Uhrzeigersinn angeordnet sind.
Polar Koordinaten
Eine einfache Form mit dem Polar-Koordinatensystem erstellen:
/lectures/2d/drawing2/polarsimple/sketch.jsView on GitHub
Verschachtelte Schleifen kombiniert mit dem Polar-Koordinatensystem (siehe auch extras/Mathe für mehr zum Thema Polar-Koordinatensystem):
/lectures/2d/drawing2/polarcomplex/sketch.jsView on GitHub
Quad & Triangle
Wenn man nur ein Polygon mit drei oder vier Punkten zeichnen möchte, kann man auch quad
und triangle
nutzen. Bei diesen beiden Funktionen wird einfach eine Liste an x/y-Paaren übergeben:
quad(0, 0, 40, 0, 40, 20, 0, 20);
triangle(0, 0, 40, 0, 40, 20);
Kurven
Wenn wir mal als nur gerade Linien in unseren Formen haben wollen, können wir auch Kurven zeichnen. Hierfür stehen uns drei verschiedene Kurven-Funktionen zur verfügung:
beginShape();
curveVertex(0, 0);
curveVertex(40, 0);
curveVertex(40, 20);
curveVertex(0, 20);
endShape(CLOSE);
curveVertex
ist die einfachste Funktion, da hier die Kurven für uns generiert werden. Mit bezierVertex
und quadraticVertex
müssen wir die Kurven selber durch Kontrollpunkte konstruieren (ähnlich wie es auch in Grafik-Bearbeitungsprogrammen der Fall ist):
beginShape();
vertex(0, 0); // we need to add a startpoint
quadraticVertex(20, 20, 40, 0);
endShape();
quadraticVertex
nimmt vier Parameter, die ersten beiden x-, y-Koordinaten sind der Kontrollpunkt und das zweite Paar sind der Zielpunkt der Kurve. bezierVertex
nimmt noch einen weiteren Kontrollpunkt, um sowohl den Anfang, als auch das Ende der Kurve unabhängig manipulieren zu können:
beginShape();
vertex(0, 0); // we need to add a startpoint
bezierVertex(10, 20, 30, 20, 40, 0);
endShape();
Am Anfang kann das Arbeiten mit Kurven verwirrend sein, wo genau die Kontrollpunkte positioniert werden müssen. Hier kann es helfen, wenn man sich die Punkte zusätzlich aufzeichnet, um ein besseres Gefühl für die Kurvenberechnung zu bekommen (verändere die Kontrollpunkte und beobachte wie sich die Kurven verändern):
/lectures/2d/drawing2/controlpoints/sketch.jsView on GitHub
Aufgabe: Polygon
Erstelle ein Polygon und versuche mit den verschiedenen Vertex-Kommandos zu arbeiten (Kurven).
Inspiration: Chaotische Kurven
/lectures/2d/drawing2/growingcurve/sketch.jsView on GitHub