Sierpinski-Kurve

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
BeneCrack
User
Beiträge: 9
Registriert: Sonntag 20. Januar 2008, 13:04
Kontaktdaten:

Hallo

Das mit dem Tabs und Leerzeichen hab ich schon gelöst. Aber ich schaffs
einfach nicht die 4 Rekursionen in einem zu unterbringen.

Und kann mir jemand dieses Programm:
(http://paste.pocoo.org/show/22789/)
in python umschreiben oder nur die Rekursion weil ich versteh diese Programmiersprache nicht.

Danke Leute
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

BeneCrack hat geschrieben:Das mit dem Tabs und Leerzeichen hab ich schon gelöst. Aber ich schaffs einfach nicht die 4 Rekursionen in einem zu unterbringen.
Das sind keine "4 Rekursionen".
Eine rekursion hast du z.B. dann, wenn eine Funktion sich selber aufruft, das typische Beispiel ist da die fakultät: !3 = 3 * !2
Es wäre hier vmtl besser, wenn du erstmal, unabhängig von der Programmiersprache das konzept "Rekursion" zu verstehen versuchst.
Und kann mir jemand dieses Programm:
(http://paste.pocoo.org/show/22789/)
in python umschreiben oder nur die Rekursion weil ich versteh diese Programmiersprache nicht.
Das ist so ziemlich der einzige weg, sich hier böse kommentare einzufangen.
Die populären Antworten dürften sein:
"Was bietest du denn als Bezahlung dafür, dass ich deine Arbeit mache?"
oder einfach
"Wir machen dir nicht deine Hausaufgaben".

Python ist recht leicht zu lernen, aber man muss (wie bei Mathe) nicht versuchen, nur das zu verstehen, was man gerade für die Aufgabe braucht, das Funktioniert nie.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

keppla hat geschrieben:
BeneCrack hat geschrieben:Das mit dem Tabs und Leerzeichen hab ich schon gelöst. Aber ich schaffs einfach nicht die 4 Rekursionen in einem zu unterbringen.
Das sind keine "4 Rekursionen".
Eine rekursion hast du z.B. dann, wenn eine Funktion sich selber aufruft, das typische Beispiel ist da die fakultät: !3 = 3 * !2
Es wäre hier vmtl besser, wenn du erstmal, unabhängig von der Programmiersprache das konzept "Rekursion" zu verstehen versuchst.
"The Little Schemer" lehrt beispielsweise Rekursion. Mehr als dass es Scheme lehrt.
keppla hat geschrieben:Das ist so ziemlich der einzige weg, sich hier böse kommentare einzufangen.
Die populären Antworten dürften sein:
"Was bietest du denn als Bezahlung dafür, dass ich deine Arbeit mache?"
oder einfach
"Wir machen dir nicht deine Hausaufgaben".
Oh, jetzt wollt ich doch grad das sagen :P
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BeneCrack
User
Beiträge: 9
Registriert: Sonntag 20. Januar 2008, 13:04
Kontaktdaten:

Hallo Leute

Habs heute geschafft. Morgen muss ich die Aufgabe abgeben und alles
funktioniert.
Achja ich hab es mit PYX gemacht weil es so verlang ist.
Hier der Sourcecode:

Datei Ausfuehren_sierKurve.py:

Code: Alles auswählen


   # erstellt am: 24.01.2008
   # Projektname: Sierpinski Kurve
   # Dateiname: Ausfuehren_sierKurve.py
   # Autor: Benedek Benjamin, 2BHDV, d06035, 03
   # (C) Copyright 2007-2008 Benedek Benjamin
   

import sierKurve

level = 1

kurve = sierKurve.SierpinskiKurve()
kurve.generate(level)
kurve.save("SierpinskiKurve_Stufe" + str(level))
Datei sierKurve.py:

Code: Alles auswählen


   # erstellt am: 24.01.2008
   # Projektname: Sierpinski Kurve
   # Dateiname: sierKurve.py
   # Autor: Benedek Benjamin, 2BHDV, d06035, 03
   # (C) Copyright 2007-2008 Benedek Benjamin

from pyx import *


class SierKurve():
	thisX = 0
	thisY = 0
	
	def __init__(self):	#Zeichenfläche wird erstellt
		self.img = canvas.canvas()
	
	def goToXY(self, x, y):
		SierKurve.thisX = x
		SierKurve.thisY = y
	
	def lineRel(self, deltaX, deltaY):	#Linie wird gezeichnet
		self.img.stroke(path.line(SierKurve.thisX, SierKurve.thisY, SierKurve.thisX+deltaX, SierKurve.thisY+deltaY))
		SierKurve.thisX += deltaX
		SierKurve.thisY += deltaY
	def save(self, filename):	#Die Zeichnung wird als PDF abgespeichert
		self.img.writeEPSfile(filename)
		self.img.writePDFfile(filename)
	        print 'Gespeichert als: %s' % filename

class SierpinskiKurve(SierKurve):
	dist = 1
	dist0 = 1
	def __init__(self):
		SierKurve.__init__(self)
	
	def generate(self, level):	#Hier beginnt alles
		print "Einen Moment bitte, Daten werden verarbeitet..."
		SierpinskiKurve.dist = SierpinskiKurve.dist0
		
		#Grundmuster besteht aus dem aufruf von den A B C D Funktionen
		self.goToXY(2*SierpinskiKurve.dist,SierpinskiKurve.dist)
		self.sierpA(level) 	#Rekursion wird gestartet
		self.lineRel(+SierpinskiKurve.dist,+SierpinskiKurve.dist)
		self.sierpB(level)      #Rekursion wird gestartet
		self.lineRel(-SierpinskiKurve.dist,+SierpinskiKurve.dist)
		self.sierpC(level) 	#Rekursion wird gestartet
		self.lineRel(-SierpinskiKurve.dist,-SierpinskiKurve.dist)
		self.sierpD(level)      #Rekursion wird gestartet  
		self.lineRel(+SierpinskiKurve.dist,-SierpinskiKurve.dist)
	
	
	#So ensteht einfach erklärt eine Sierpinski Kurve:
	#A: 	aufruf von A B D A
	#B:	aufruf von B C A B
	#C:	aufruf von C D B C
	#D:	aufruf von D A C D
	# Bei jedem Rekursionsaufruf wird die Rekursionstiefe um 1 vermindern
	#In den Rekursionsfunktionen wird auch die Zeichen Funktion (lineRel) mit den entsprechenden Koordinaten aufgerufen
	def sierpA (self, level):
		if (level > 0):
			self.sierpA(level-1)    
			self.lineRel(+SierpinskiKurve.dist,+SierpinskiKurve.dist)
			self.sierpB(level-1)   
			self.lineRel(+2*SierpinskiKurve.dist,0)
			self.sierpD(level-1)    
			self.lineRel(+SierpinskiKurve.dist,-SierpinskiKurve.dist)
			self.sierpA(level-1)
		


	def sierpB (self, level):
		if (level > 0):
			self.sierpB(level-1)    
			self.lineRel(-SierpinskiKurve.dist,+SierpinskiKurve.dist)
			self.sierpC(level-1)    
			self.lineRel(0,+2*SierpinskiKurve.dist)
			self.sierpA(level-1)    
			self.lineRel(+SierpinskiKurve.dist,+SierpinskiKurve.dist)
			self.sierpB(level-1)
		


	def sierpC (self, level):
		if (level > 0):
			self.sierpC(level-1)    
			self.lineRel(-SierpinskiKurve.dist,-SierpinskiKurve.dist)
			self.sierpD(level-1)    
			self.lineRel(-2*SierpinskiKurve.dist,0)
			self.sierpB(level-1)    
			self.lineRel(-SierpinskiKurve.dist,+SierpinskiKurve.dist)
			self.sierpC(level-1)
		


	def sierpD (self, level):
		if (level > 0):
			self.sierpD(level-1)    
			self.lineRel(+SierpinskiKurve.dist,-SierpinskiKurve.dist)
			self.sierpA(level-1)    
			self.lineRel(0,-2*SierpinskiKurve.dist)
			self.sierpC(level-1)    
			self.lineRel(-SierpinskiKurve.dist,-SierpinskiKurve.dist)
			self.sierpD(level-1)
	
Ein grosses dankeschön an euch, weil Ihr ein wenig geholfen habt. :lol: :lol: :lol:
Antworten