2.13 DRUCKEN

 

 

EINFÜHRUNG

 

Für exaktes Zeichnen eignet sich ein Drucker besser als der Bildschirm, da ein Drucker meist eine weit höhere Auflösung hat, beispielsweise 1200x1200 dpi gegenüber den üblichen Bildschirmauflösungen von ungefähr 100 dpi. Das Ausdrucken einer GPanel-Grafik erfolgt so, dass die Grafikoperationen statt auf dem Bildschirm auf dem Drucker dargestellt werden. Damit lassen sich hochauflösene Vektorgrafiken erstellen. Dazu definiert man eine Funktion mit irgend einem Namen, die alle Befehle zur Erstellung des Bildes enthält. Beim direkten Aufruf erscheint das Bild auf dem Bildschirm. Um es auszudrucken, ruft man printerPlot() mit dem Funktionsnamen auf.

Es wird ein Druckerdialog angezeigt, in dem man den Drucker auswählen und seine Eigenschaften einstellen kann. Du kannst so auch auf virtuelle Drucker ausgeben, die eine Grafik-Datei in einem hochauflösenden Format (z.B. Tiff oder EPS) erstellen [mehr...Unter Windows eignet sich beispielsweise ImagePrinter].

PROGRAMMIERKONZEPTE: Hochauflösende Grafik

 

 

EIN NICHT FEUERSPEIENDER DRACHEN

 

Um dir Freude am hochauflösenden Drucken zu bereiten, lässt du die Turtle ein komplizierteres Bild zeichnen, nämlich eine Drachenkurve. Zwar kann man durch Falten eines Papierstreifens eine solche Kurve auch erzeugen, aber mit Computergrafik geht es viel einfacher.  Allerdings ist die Umsetzung der Faltanleitung in einen Algorithmus langwierig nicht trivial [mehr... Du kannst dich im Internet orientieren, was genau eine Drachenkurve ist]. Mit Computergrafik geht es viel einfacher.

 

Es geht ja hier ums Drucken und deshalb verwendest du eine vorgegebene Funktion figure(s, n, flag), um die Kurve zu zeichnen. Immerhin siehst du, dass die Kurve rekursiv definiert ist und sich selbst sogar zweimal, allerdings mit kleinerer Ordnung n-1 aufruft. Zudem verwendet die Funktion einen Parameter flag, der 1 oder -1 sein kann und bestimmt, in welcher Richtung gezeichnet wird.

Um das Bild auszudrucken, erstellst du es in der Funktion doIt(), die keine Parameter haben darf. Wenn du doIt() ganz normal aufrufst, so erscheint die Zeichnung auf dem Bildschirm. Wenn du printerPlot(doIt) aufruftst, also dem Befehl printerPlot() den Namen doIt übergibst, wird die Zeichnung (ohne die Turtle zu zeigen) ausgedruckt.

from gturtle import *
import math

nbGenerations = 12

def doIt():
    rt(90)
    figure(300, nbGenerations, 1)

def figure(s, n, flag):
    if n == 0:
        fd(s);
    else:
        alpha = 45
        if flag == 1:
            alpha = -alpha
            flag = -flag
        lt(alpha)
        figure(s / math.sqrt(2), n - 1, -flag)
        rt(2 * alpha)
        figure(s / math.sqrt(2), n - 1, flag)
        lt(alpha)

makeTurtle()
ht()
setPos(-100, 100) # screen
doIt()
setPos(100, 0)      # printer
printerPlot(doIt)
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

 

 

MEMO

 

Du musst mit setPos() die Zeichnung auf dem Blatt richtig positionieren. Je nach Grösse des Turtlefensters und dem verwendeten Drucker, wird sich diese Position ändern. Du kannst beim Aufruf von printerPlot() auch noch einen Skalierungsfaktor k angeben, also printerPlot(doIt, k), der für k > 1 das Bild vergrössert und es für k < 1 verkleinert.

 

 

AUFGABEN

 

1.

Joshua Goldstein schlägt vor,  Paare von Move/Turn-Befehlen zur Erstellung von schönen Figuren zu verwenden. Ein Schritt besteht also aus den Befehlen

   forward(s)
   right(a)

Zeichne und drucke die Goldstein-Figuren für folgende Fälle:

a. 31 Schritte mit s = 300,  a = 151°
b. 142 Schritte mit s = 400,  a = 159.72°

Für die Positionierung musst du selbst sorgen.

   

2.

Ein Schritt kann auch aus zwei  Move/Turn-Paaren bestehen
Zeichne und drucke die Goldstein-Figur für folgenden Fall:
37 Schritte mit s = 77, a = 140.86° und s = 310, a = 112°

   

3.

Zeichne und drucke die Goldstein-Figur mit drei Move/Turn-Paaren:
47 Schritte mit s = 15.4, a = 140.86 ° und s = 62, a = 112° und s= 57.2, a = 130°