Python exemplarisch
deutsch     english

FARBEN UND FORMEN



 

Figuren zeichnen und positionieren

 


Das Modul gpanel verfügt über Funktionen, mit welchen man Kreise, Quadrate, Rechtecke, Kreisbogen und Polygons sehr einfach zeichnen kann. Gefüllte Figuren erhält man mit dem Präfix fill. gezeichnet. Im ersten Beispiel werden die Farbnamen mit den Farbnamen festgelegt. gpanel kennt die sogenannten X11-Farben. Das sind einige dutzend Farbnamen, die man im Internet unter http://cng.seas.rochester.edu/CNG/docs/x11color.html finden kann.

Der unsichtbarer Grafikcursor befindet sich default im Punkt (0, 0) und kann mit der Funktion pos(x, y) an eine beliebige Position im Grafikfenster verschoben werden. Viele Funktionen zum Zeichnen  von Formen verwenden die aktuelle Lage des Grafikcursors.

Programm: [►]

# ShapesEx1.py

from gpanel import *

makeGPanel(-10, 10, -10, 10)
circle(10)
rectangle(14.14, 14.14)
setColor("yellow")
fillRectangle(10,10)
setColor("red")
fillCircle(4)
setColor("darkblue")
pos(-5, -5)
fillCircle(2)
pos(5, 5)
fillCircle(2)
keep()
Progammcode markieren (Ctrl+C copy, Ctrl+V einfügen)
 

 

  Erklärungen zum Programmcode
 

Die Zeichnungsfunktionen können als Parameter ganze Zahlen, Dezimalzahlen, Punktlisten/tupels oder komplexe Zahlen haben. Für die Darstellung werden diese Zahlen in Pixel umgerechnet, so dass wie üblich Benutzerkoordinaten (durch xmin, xmax, ymin, ymax festgelegt) verwendet werden.

 

 

Zufälliges Malen

 

Das Programm zeichnet 80 Rechtecke, deren Position, Grösse und Füllfarbe zufällig gewählt ist.

Die Funktion randint(a, b) aus dem Modul random erzeugt ganzzahlige Zufallszahlen zwischen a und b, wobei a die kleinste und b die grösste Zahl (inklusive) ist.

Die Farben sind mit ihren RGB-Anteilen definiert. Auch diese werden zufällig bestimmt.

 

Programm: [►]

#ShapesEx2.py

from gpanel import *
from random import randint

makeGPanel(0, 100, 0, 100)

for i in range(80):
    pos(randint(0, 100), randint(0, 100))
    setColor(makeColor(randint(0, 255), randint(0, 255), randint(0, 255)))
    fillRectangle(randint(10, 30), randint(5, 30)) 
keep()    
Progammcode markieren (Ctrl+C copy, Ctrl+V einfügen)

 

  Erklärungen zum Programmcode
 

Man kann auch das ganze Modul random importieren (import random) und die ganzzahligen Zufallszahlen durch Vorstellen des Präfix random mit random.randint() erzeugen.

Das Modul random enthält auch die wichtige Funktion random().
Diese erzeugt eine Zufallszahl als Float (mit 12 Dezimalstellen), grösser gleich 0 und kleiner als 1
(zum Beispiel. 0.854704980293).

 

 

Schachbrett

 

Das Programm zeichnet ein schwarz-weisses Schachbrett. Die zu färbende Felder werden mit dem bekannten Trick gewählt: Jedes Feld ist durch einen Zeilen- und einen Spaltenindex ausgewählt. Ist die Summe dieser Indizes gerade, wird das Feld gefärbt.

Zum Färben der Felder wird hier eine andere Form von  rectangle() verwendet. Diese erhält als Parameter die x- und y-Koordinaten der linken unteren und rechten oberen Ecke des Rechtecks.

 

Programm: [►]

# ShapesEx3.py

from gpanel import *

makeGPanel(0, 8, 0, 8)

for i in range(8):
    for j in range(8):
        if (i + j) % 2 == 0:
            fillRectangle(i, j, i + 1, j + 1)
keep() 
Progammcode markieren (Ctrl+C copy, Ctrl+V einfügen)

 

  Erklärungen zum Programmcode
 

(i + j) % 2 gibt den Rest nach der Division durch 2. Ist der Rest 0, so ist (i + j) eine gerade Zahl.

 

 

Polygone zeichnen

 

Die Funktion polygon() zeichnet ein leeres, die Funktion fillPolygon() ein gefülltes Polygon. Beide Funktionen erhalten als Parameter die Liste der Eckpunkte.

 

Programm: [►]

# ShapesEx4.py

from gpanel import *

makeGPanel(-10, 10, -10, 10)

corners = [(-5, -2), (-2, -6), (1, -5), (4, 2), (-1, 3)]
setColor("fuchsia")
fillPolygon(corners)
keep() 
Progammcode markieren (Ctrl+C copy, Ctrl+V einfügen)

 

 

Geschlossene Flächen mit "floodfill" färben

 

Eine geschlossene Flächen kann nachträglich gefüllt werden. Dazu verwendet man die Funktion fill(x, y, oldcolor, color). x, y sind Koordinaten eines Punktes, der sich in der zu färbenden Fläche befindet, oldcolor die aktuelle Farbe und color die neue Farbe..

 

Programm: [►]

#ShapesEx5.py

from gpanel import *

makeGPanel(-10, 10, -10, 10)

line(-6, -3, 4, 6)
line(-1, 7, 6, -5)
line(-8, 1, 7, -4)
fill(0, 0, "white", "red")
keep() 
Progammcode markieren (Ctrl+C copy, Ctrl+V einfügen)

 

  Erklärungen zum Programmcode
 

Die Farbe in der Funktion fill() kann auch mit makeColor(r, g, b) gesetzt werden:
fill(0, 0, makeColor(255, 255, 255), makeColor(255, 0, 0))
oder Farbkomponenten als Liste:
fill(0, 0, [255, 255, 255], [255, 0, 0])

 

 

Farbmischung im RGB-Modell

 

Man zeichnet die drei berühmten Farbkreise der additiven Farbmischung, indem man mit zwei verschachtelten for-Schleifen Flächer des Grafikfensters Pixel für Pixel durchläuft und Punkte mit der entsprechenden Farbe zeichnet. Durch die Überlagerung der Kreise entstehen die Mischfarben.

 

Programm: [►]

# ShapesEx6.py

from gpanel import *

xRed = 200
yRed = 200
xGreen = 300
yGreen = 200
xBlue = 250
yBlue = 300

makeGPanel(Size(501, 501))
enableRepaint(False)
window(0, 500, 500, 0)    # y axis downwards
for x in range(501):
    for y in range(501):
        red = green = blue = 0
        if (x - xRed) * (x - xRed) + (y - yRed) * (y - yRed) < 16000:
            red = 255
        if (x - xGreen) * (x - xGreen) + (y - yGreen) * (y - yGreen) < 16000:
            green = 255
        if (x - xBlue) * (x - xBlue) + (y - yBlue) * (y - yBlue) < 16000:
           blue = 255
        setColor(makeColor(red, green, blue))
        point(x, y)
    repaint()
keep()
Progammcode markieren (Ctrl+C copy, Ctrl+V einfügen)

 

  Erklärungen zum Programmcode
 

xRed, yRed, xGreen, yGreen, xBlue, yBlue sind die Mittelpunkte der drei Farbkreise.
point(x, y): Zeichnet einen Punkt mit den Koordinaten x, y mit der gesetzten Farbe.