Dies ist eine alte Version des Dokuments!
Wir wollten eine Silhouette einer Berglandschaft mit der Turtlegrafik zeichnen. Zwei Ansätze wurden zugunsten des objektorientierten Ansatzes verworfen.
import turtle from numpy import random as rd class dot(object): ''' Argumente: x - Eine x-Koordinate des Typs Integer. y - Eine y-Koordinate des Typs Integer. Eine Klasse die einen Punkt darstellt. Besitzt einen x- und einen y- Wert. ''' def __init__(self, x, y): self.x = x self.y = y def divide(self, n): ''' Argumente: n - Eine beliebige ganze Zahl. Teilt den Vektor des Punktes durch eine ganzzahlige Zahl n. Und gibt den neuen Vektor zurueck. Dieser Punkt wird nicht ''' return dot(self.x//n, self.y//n) def add(self, dot1): ''' Argumente: dot1 - Ein beliebiger Punkt der Klasse "dot" Addiert einen anderen Punkt. Addition erfolgt wie bei Vektoren. Gibt die Summe zurueck. Dieser Punkt wird nicht veraendert. ''' return dot(dot1.x+self.x, dot1.y+self.y) def draw(self): ''' Zeichnet einen Punkt an den Koordinaten des Punktes mithilfe des "turtle" Paketes. Benoetigt das turtle Paket. ''' turtle.penup() turtle.goto(self.x, self.y) turtle.pendown() turtle.dot() def drawline(self): ''' Zeichnet einen Punkt von der momentanen Position der turtle zu den Koordinaten des Punktes. Benoetigt das turtle Paket. ''' turtle.pendown() turtle.goto(self.x, self.y) def rlines(dot1, dot2, height=400, depth=8): ''' Argumente: dot1 - Linker Punkt der Kurve dot2 - Rechter Punkt der Kurve height - maximale Hoehe der Punkte depth - Rekursionstiefe Bestimmt rekursiv zufaellig abweichende Punkte entlang einer Kurve zwischen zwei Punkten und gibt diese in einer Liste zurueck. Alle Punkte sind Objekte der "dot" Klasse. TODO: Anpassen der Parameter um besser aussehende Ergebnisse zu erzielen. ''' if depth > 0: a = rd.randint(low=-height/10, high=height) centerdot = dot1.add(dot2).divide(2) centerdot.y += a leftdots = rlines(dot1, centerdot, height//2, depth-1) rightdots = rlines(centerdot, dot2, height//2, depth-1) return leftdots + [centerdot] + rightdots else: return [] dot1 = dot(-500, -200) dot2 = dot(500, -200) a = [dot1] + rlines(dot1, dot2) + [dot2] turtle.penup() turtle.goto(dot1.x, dot1.y) for i in a: i.drawline()