Apfelmännchen -> z²+c

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Olaf
Beiträge: 117
Registriert: 20.04.2006 14:51
Wohnort: 66606 St.Wendel (Niederlinxweiler, Dr.Albert-Schweitzer-Str.9)
Kontaktdaten:

Apfelmännchen -> z²+c

Beitrag von Olaf »

8) Hi!!!
Zum Thema z²+c hab ich auch noch was gemacht.
Mit dem Programm kann man sich auch durch das Fraktale durchzoomen und so(das geht ziemlich gut und schnell).

WICHTIG: Debugger AUS!!!

Der bremst das nämlich sehr.
Man kann den Ausschnitt, den man gerade sieht auch als Bild speichern
(Einstellungen bezüglich der Größe und des Formats, ich empfehle PNG, kann man auch machen).
Besser is aber, wenn man's als ".frac"-Datei speichern lässt(speichert die zur Berechnung wichtigen Daten), weil's dann nur'n paar Bytes groß ist und man beim öffnen mit dem Programm gleich weiterzoomen kann(anders als beim Bild). <)
Hatt bisher noch keine Zeit in zu kommentieren(kommt noch).
Wenn sich jemand wundert, dass einige Buttons erst beim Laufen des Programms angemalt werden, dann liegt's dadran, dass ich hier ja keine Bilder mitliefern kann.

Leider ist der Code aufgrund dessen, was das Programm bisher kann sehr umfangreich (ca. 1140 Zeilen). ;-)

Aber probiert's mal aus, sieht lustig aus!!!

Code: Alles auswählen

Parameter$=ProgramParameter()
;-Identifier
Enumeration
#Fraktale_Fenster

#Maus_Info
#X_Anzeige_Text
#X_Anzeige_Zahl
#Y_Anzeige_Text
#Y_Anzeige_Zahl

#SeedValue_Info
#SeedValueX_Text
#SeedValueX_Zahl
#SeedValueY_Text
#SeedValueY_Zahl

#Startwerte
#X_Startwert_Text
#X_Startwert_Zahl
#Y_Startwert_Text
#Y_Startwert_Zahl

#Fraktale_Gadget
#Fraktale_Bild
#Fraktale_Copy

#Verlauf_Bild
#Verlauf_Gadget
#Iterationszahl_Skala

#Iterationstiefe_Info
#Iterationstiefe_Text
#Iterationstiefe_Zahl
#Iterationstiefe_Farbe
#Iterationstiefe_Gadget

#Aequipotentiallinien
#Ja
#Nein

#Start

#Zoom_Faktor_Info
#Zoom_Faktor_Text
#Zoom_Faktor_Zahl
#Vergroesserung_Info
#Vergroesserung_Text

#ToolBar_Bar
#ToolBar_New
#ToolBar_Open
#ToolBar_Save
#ToolBar_Print_Datei
#Bitmap
#ToolBar_Info
#ToolBar_Image

#Tool_Moviemode
#Tool_Undo
#Tool_Play
#Tool_Make
#Moviemode
#Undo
#Play
#Make

#Menu
EndEnumeration
;-Initialisierungen
InitSprite()
InitSprite3D()

UseJPEGImageDecoder()
UseJPEGImageEncoder()
UsePNGImageDecoder()
UsePNGImageEncoder()
;-Datasection

;DataSection
;	Mode:
;	IncludeBinary "Moviemode.bmp"
;	Mode2:
;	IncludeBinary "Moviemode2.bmp"
;	Undo:
;	IncludeBinary "Undo.bmp"
;	Play:
;	IncludeBinary "Play.bmp"
;	Make:
;	IncludeBinary "Make.bmp"
;EndDataSection

;-Variablen-Deklaration

;Rechen-Variablen

;Maus-Variablen
Maus_X_vorher.l
Maus_Y_vorher.l
Global fx,fy,Maus_X_aktuell.l,Maus_Y_aktuell.l,KonstanteX.d,KonstanteY.d,SeedValueX.d,SeedValueY.d,X_Startwert.d,Y_Startwert.d,Schrittweite.d,KantenlaengePixel.l,KantenlaengeOriginal.d,Aequipotentiallinien.l,a.d,b.d,x.d,y.d,Realanteil.d,Imaginaeranteil.d,Versuche,Betrag.d,PixelX.l,PixelY.l,Vergroesserung.d,Zoomfaktor.d,Movie,Group
X_Startwert						= -2.5
Y_Startwert						= -2.5
KantenlaengePixel			= 470
KantenlaengeOriginal	= 5
Schrittweite=KantenlaengeOriginal/KantenlaengePixel
Zoomfaktor=6
Vergroesserung				=1
Aequipotentiallinien 	=0
;-Prozeduren

Global Dim Iteration(472,472)

Procedure Berechne_Fraktale()

			b=Y_Startwert
			For PixelY=0 To 470
				a=X_Startwert
				For PixelX=0 To 470
					SeedValueX=a
					SeedValueY=b
					x=KonstanteX
					y=KonstanteY
					Versuche=0
					Betrag=0
					While ( Versuche < 255 And Betrag < 5 )
					Versuche = Versuche + 1
					Betrag	 =	x*x + y*y
					
					;Funktions-Beschreibung
					
					Realanteil=x*x-y*y	+SeedValueX
					Imaginaeranteil=2*x*y	+SeedValueY
					x=Realanteil
					y=Imaginaeranteil
					
					Wend
					
					Iteration(PixelX,PixelY) = Versuche
					
					a = a + Schrittweite
				Next PixelX
				b = b + Schrittweite
			Next PixelY
			
		StartDrawing(ImageOutput(#Fraktale_Bild))
		If Aequipotentiallinien=1
			Box(0,0,470,470,RGB(255,255,255))
			For PixelX=0 To 470
				For PixelY=0 To 470
					If Iteration(PixelX,PixelY+1)<>Iteration(PixelX,PixelY) Or Iteration(PixelX+1,PixelY)<>Iteration(PixelX,PixelY)
							Plot(PixelX,PixelY,RGB(0,0,0))
					Else
						drawpoint:
						If Iteration(PixelX,PixelY)<51     ;rot-gelb 
					    Plot(PixelX,PixelY,RGB(255,5*Iteration(PixelX,PixelY),0))
					  ElseIf Iteration(PixelX,PixelY)>50 And Iteration(PixelX,PixelY)<102 ;gelb-grün
					    Plot(PixelX,PixelY,RGB(255-5*(Iteration(PixelX,PixelY)-1*51),255,0))
					  ElseIf Iteration(PixelX,PixelY)>101 And Iteration(PixelX,PixelY)<153 ;grün-türkis
					    Plot(PixelX,PixelY,RGB(0,255,5*(Iteration(PixelX,PixelY)-2*51)))
					  ElseIf Iteration(PixelX,PixelY)>152 And Iteration(PixelX,PixelY)<204 ;türkis-blau
					    Plot(PixelX,PixelY,RGB(0,255-5*(Iteration(PixelX,PixelY)-3*51),255))
					  ElseIf Iteration(PixelX,PixelY)>203 And Iteration(PixelX,PixelY)<255 ;blau-violett
					    Plot(PixelX,PixelY,RGB(5*(Iteration(PixelX,PixelY)-4*51),0,255))
					  ElseIf Iteration(PixelX,PixelY)=255 ;weiß
					    Plot(PixelX,PixelY,RGB(255,255,255))
					  EndIf
  				EndIf
  			Next PixelY
			Next PixelX
		Else
			Box(0,0,470,470,RGB(0,0,0))
			For PixelX=0 To 470
				For PixelY=0 To 470
					If Iteration(PixelX,PixelY)<51     ;rot-gelb 
					  Plot(PixelX,PixelY,RGB(255,5*Iteration(PixelX,PixelY),0))
					ElseIf Iteration(PixelX,PixelY)>50 And Iteration(PixelX,PixelY)<102 ;gelb-grün
					  Plot(PixelX,PixelY,RGB(255-5*(Iteration(PixelX,PixelY)-1*51),255,0))
					ElseIf Iteration(PixelX,PixelY)>101 And Iteration(PixelX,PixelY)<153 ;grün-türkis
					  Plot(PixelX,PixelY,RGB(0,255,5*(Iteration(PixelX,PixelY)-2*51)))
					ElseIf Iteration(PixelX,PixelY)>152 And Iteration(PixelX,PixelY)<204 ;türkis-blau
					  Plot(PixelX,PixelY,RGB(0,255-5*(Iteration(PixelX,PixelY)-3*51),255))
					ElseIf Iteration(PixelX,PixelY)>203 And Iteration(PixelX,PixelY)<255 ;blau-violett
					  Plot(PixelX,PixelY,RGB(5*(Iteration(PixelX,PixelY)-4*51),0,255))
					ElseIf Iteration(PixelX,PixelY)=255 ;weiß
					  Plot(PixelX,PixelY,RGB(0,0,0))
					EndIf
				Next PixelY
			Next PixelX
		EndIf
    StopDrawing()
EndProcedure

Procedure IterationDepth()
	If Maus_X_aktuell>470 Or Maus_Y_aktuell>470
	Else
		it=Iteration(Maus_X_aktuell,Maus_Y_aktuell)
		SetGadgetText(#Iterationstiefe_Zahl,Str(it))
		StartDrawing(ImageOutput(#Iterationstiefe_Farbe))
			If it<51     ;rot-gelb 
			  Box(0,0,127+fx,50,RGB(255,5*it,0))
			ElseIf it>50 And it<102 ;gelb-grün
			  Box(0,0,127+fx,50,RGB(255-5*(it-1*51),255,0))
			ElseIf it>101 And it<153 ;grün-türkis
			  Box(0,0,127+fx,50,RGB(0,255,5*(it-2*51)))
			ElseIf it>152 And it<204 ;türkis-blau
			  Box(0,0,127+fx,50,RGB(0,255-5*(it-3*51),255))
			ElseIf it>203 And it<255 ;blau-violett
			  Box(0,0,127+fx,50,RGB(5*(it-4*51),0,255))
			ElseIf it=255 ;weiß
				If Aequipotentiallinien=1
			  	Box(0,0,127+fx,50,RGB(255,255,255))
	  		Else
		  		Box(0,0,127+fx,50,RGB(0,0,0))
		  	EndIf
			EndIf
		StopDrawing()
	EndIf
EndProcedure

Procedure OpenPreferenceWindow()
CopyImage(#Fraktale_Bild,#Fraktale_Copy)
SetGadgetState(#Fraktale_Gadget,ImageID(#Fraktale_Copy))
If Movie=0
	OpenPreferences("Fractal.prefs")
	Enumeration #PB_Compiler_EnumerationValue
		#Preferences
		#Panel
			#Typ
				#Typ_Text
				#Typ_Typ
				#Typ_Info
			#Size
				#Size_Text
				#Size_Size
				#Size_Info
			
			#Auf
				#Auf_Text
				#Auf_Auf
				#Auf_Info
			#Time
				#Time_Text
				#Time_Time
				#Time_Info
		#OK
		#Abbrechen
		#Uebernehmen
	EndEnumeration
	DisableWindow(#Fraktale_Fenster,1)
	OpenWindow(#Preferences,0,0,400,400,"Einstellungen",#PB_Window_MinimizeGadget|#PB_Window_WindowCentered,WindowID(#Fraktale_Fenster))
	StickyWindow(#Preferences,1)
		CreateGadgetList(WindowID(#Preferences))
			ButtonGadget(#OK,5,375,130,20,"OK")
			ButtonGadget(#Abbrechen,135,375,130,20,"Abbrechen")
			ButtonGadget(#Uebernehmen,265,375,130,20,"Übernehmen"):DisableGadget(#Uebernehmen,1)
			PanelGadget(#Panel,5,5,390,365)
				AddGadgetItem(#Panel,-1,"Bitmap",ImageID(#ToolBar_Image))
					Frame3DGadget(#Typ,5,5,375,100,"Speicher - Format")
						TextGadget(#Typ_Info,10,20,365,30,"Wählen Sie das Speicherformat, in dem die Fraktale als Bilder gespeichert werden sollen :")
						ComboBoxGadget(#Typ_Typ,90,33,285,20)
							AddGadgetItem(#Typ_Typ,0,"Bitmap - Format")
							AddGadgetItem(#Typ_Typ,1,"JPEG - Format")
							AddGadgetItem(#Typ_Typ,2,"PNG - Format")
						TextGadget(#Typ_Text,10,55,365,45,"",#PB_Text_Border)
					Frame3DGadget(#Size,5,115,375,220,"Größeneinstellungen")
						TextGadget(#Size_Info,10,130,365,20,"Wählen Sie die Größe des zu erstellenden Bildes:")
						ComboBoxGadget(#Size_Size,10,150,120,20)
							AddGadgetItem(#Size_Size,0,"470 X 470")
							AddGadgetItem(#Size_Size,1,"512 X 512")
							AddGadgetItem(#Size_Size,2,"1024 X 1024")
							AddGadgetItem(#Size_Size,3,"2048 X 2048")
							AddGadgetItem(#Size_Size,4,"4096 X 4096")
						TextGadget(#Size_Text,10,175,365,150,"",#PB_Text_Border)
				CloseGadgetList()
			textt1$="Beim speichern im Bitmap - Format werden die Farbinformation des Bildes unkomprimiert gespeichert. Dies resultiert in sehr genauen, aber auch sehr großen Bilddateien."
			textt2$="Beim JPEG - Format werden die Farbinformationen kompimiert. So erhalten Sie wesentlich kleinere Bilder als beim Bitmap - Format (nützlich bei großen Bildern mit hoher Auflösung), die jedoch qualitativ etwas schlechter sind."
			textt3$="Beim PNG - Format werden die Farbinformationen komprimiert, jedoch gehen hier (anders als beim JPEG - Format) keine Farbinformationen verloren, sodass die Bilder genau bleiben."
			texts1$="Auflösung 470 X 470 :"+Chr(10)+"Dies ist die Auflösung des Programmbildschirms. Wenn Sie ihre Fraktale in dieser Größe speichern wollen, muss der Bildschirm nur "+Chr(34)+"abfotografiert"+Chr(34)+" werden. Somit kann das Bild sehr schnell gespeichert werden. In allen anderen Fällen wird das Bild vor dem speichern neu berechnet (dies nimmt teilweise viel zeit in Anspruch)."+Chr(10)+"Speichergröße im Bitmap - Format : ca. 650 KB"
			texts2$="Auflösung 512 X 512 :"+Chr(10)+"Das Bild wird in der Auflösung 512 X 512 berechnet."+Chr(10)+"Speichergröße im Bitmap - Format : ca. 770 KB"
			texts3$="Auflösung 1024 X 1024 :"+Chr(10)+"Das Bild wird in der Auflösung 1024 X 1024 berechnet."+Chr(10)+"Speichergröße im Bitmap - Format : ca. 3 MB"
			texts4$="Auflösung 2048 X 2048 :"+Chr(10)+"Das Bild wird in der Auflösung 2048 X 2048 berechnet ( Zeit ! )."+Chr(10)+"Speichergröße im Bitmap - Format : ca. 12 MB"
			texts5$="Auflösung 4096 X 4096 :"+Chr(10)+"Das Bild wird in der Auflösung 4096 X 4096 berechnet ( Zeit ! )."+Chr(10)+"Speichergröße im Bitmap - Format : ca. 48 MB"
			Select ReadPreferenceString("SaveType","Bitmap - Format")
				Case "Bitmap - Format"
					SetGadgetText(#Typ_Text,textt1$)
					SetGadgetState(#Typ_Typ,0)
				Case "JPEG - Format"
					SetGadgetText(#Typ_Text,textt2$)
					SetGadgetState(#Typ_Typ,1)
				Case "PNG - Format"
					SetGadgetText(#Typ_Text,textt3$)
					SetGadgetState(#Typ_Typ,2)
			EndSelect
			Select ReadPreferenceString("SaveSize","470 X 470")
				Case "470 X 470"
					SetGadgetText(#Size_Text,texts1$)
					SetGadgetState(#Size_Size,0)
				Case "512 X 512"
					SetGadgetText(#Size_Text,texts2$)
					SetGadgetState(#Size_Size,1)
				Case "1024 X 1024"
					SetGadgetText(#Size_Text,texts3$)
					SetGadgetState(#Size_Size,2)
				Case "2048 X 2048"
					SetGadgetText(#Size_Text,texts4$)
					SetGadgetState(#Size_Size,3)
				Case "4096 X 4096"
					SetGadgetText(#Size_Text,texts5$)
					SetGadgetState(#Size_Size,4)
			EndSelect
			Time=Val(ReadPreferenceString("Time","500"))
			If Time<500
				Time=500
				SetGadgetState(#Time_Time,Time)
				SetGadgetText(#Time_Text,texttime$+Str(Time)+" Millisekunden.")
			ElseIf Time>2500
				Time=2500
				SetGadgetState(#Time_Time,Time)
				SetGadgetText(#Time_Text,texttime$+Str(Time)+" Millisekunden.")
			Else
				SetGadgetState(#Time_Time,Time)
				SetGadgetText(#Time_Text,texttime$+Str(Time)+" Millisekunden.")
			EndIf
			Select ReadPreferenceString("Auf","470 X 470")
				Case "470 X 470"
					SetGadgetText(#Auf_Text,"Beim Aufnehmen wird in diesem Modus bei jedem "+Chr(34)+"Klick"+Chr(34)+" per Screenshot das neu entstandene Bild abfotografiert (spart viel Zeit).")
					SetGadgetState(#Auf_Auf,0)
				Case "512 X 512"
					SetGadgetText(#Auf_Text,"In diesem Aufnahmemodus wird nach jedem "+Chr(34)+"Klick"+Chr(34)+" das neu entstandene Bild in der Auflösung 512 X 512 neu berechnet und gespeichert.")
					SetGadgetState(#Auf_Auf,1)
				Case "1024 X 1024"
					SetGadgetText(#Auf_Text,"In diesem Aufnahmemodus wird nach jedem "+Chr(34)+"Klick"+Chr(34)+" das neu entstandene Bild in der Auflösung 1024 X 1024 neu berechnet und gespeichert.")
					SetGadgetState(#Auf_Auf,2)
				Default
					SetGadgetText(#Auf_Text,"Beim Aufnehmen wird in diesem Modus bei jedem "+Chr(34)+"Klick"+Chr(34)+" per Screenshot das neu entstandene Bild abfotografiert (spart viel Zeit).")
					SetGadgetState(#Auf_Auf,0)
			EndSelect
	Repeat
		p_event=WaitWindowEvent()
		Select EventWindow()
			Case #Fraktale_Fenster
				p_event=0
			Case #Preferences
				Select p_event
					Case #PB_Event_Gadget
						Select EventGadget()
							Case #Typ_Typ
								cont$=GetGadgetText(#Typ_Typ)
								If cont$<>ReadPreferenceString("SaveType","Bitmap - Format")
									DisableGadget(#Uebernehmen,0)
								EndIf
								Select cont$
									Case "Bitmap - Format"
										SetGadgetText(#Typ_Text,textt1$)
									Case "JPEG - Format"
										SetGadgetText(#Typ_Text,textt2$)
									Case "PNG - Format"
										SetGadgetText(#Typ_Text,textt3$)
								EndSelect
							Case #Size_Size
								cont$=GetGadgetText(#Size_Size)
								If cont$<>ReadPreferenceString("SaveSize","470 X 470")
									DisableGadget(#Uebernehmen,0)
								EndIf
								Select cont$
									Case "470 X 470"
										SetGadgetText(#Size_Text,texts1$)
									Case "512 X 512"
										SetGadgetText(#Size_Text,texts2$)
									Case "1024 X 1024"
										SetGadgetText(#Size_Text,texts3$)
									Case "2048 X 2048"
										SetGadgetText(#Size_Text,texts4$)
									Case "4096 X 4096"
										SetGadgetText(#Size_Text,texts5$)
								EndSelect
							Case #Time_Time
								cont$=GetGadgetText(#Time_Time)
								If cont$<>ReadPreferenceString("Time","500")
									DisableGadget(#Uebernehmen,0)
								EndIf
								SetGadgetText(#Time_Text,texttime$+GetGadgetText(#Time_Time)+" Millisekunden.")
							Case #Auf_Auf
								cont$=GetGadgetText(#Auf_Auf)
								If cont$<>ReadPreferenceString("Auf","470 X 470")
									DisableGadget(#Uebernehmen,0)
								EndIf
								Select GetGadgetText(#Auf_Auf)
									Case "470 X 470"
										SetGadgetText(#Auf_Text,"Beim Aufnehmen wird in diesem Modus bei jedem "+Chr(34)+"Klick"+Chr(34)+" per Screenshot das neu entstandene Bild abfotografiert (spart viel Zeit).")
									Case "512 X 512"
										SetGadgetText(#Auf_Text,"In diesem Aufnahmemodus wird nach jedem "+Chr(34)+"Klick"+Chr(34)+" das neu entstandene Bild in der Auflösung 512 X 512 neu berechnet und gespeichert.")
									Case "1024 X 1024"
										SetGadgetText(#Auf_Text,"In diesem Aufnahmemodus wird nach jedem "+Chr(34)+"Klick"+Chr(34)+" das neu entstandene Bild in der Auflösung 1024 X 1024 neu berechnet und gespeichert.")
								EndSelect
							Case #Uebernehmen
								WritePreferenceString("SaveType",GetGadgetText(#Typ_Typ))
								WritePreferenceString("SaveSize",GetGadgetText(#Size_Size))
								WritePreferenceString("Time",GetGadgetText(#Time_Time))
								WritePreferenceString("Auf",GetGadgetText(#Auf_Auf))
								DisableGadget(#Uebernehmen,1)
							Case #Abbrechen
								WindowEvent()
								Break
							Case #OK
								WritePreferenceString("SaveType",GetGadgetText(#Typ_Typ))
								WritePreferenceString("SaveSize",GetGadgetText(#Size_Size))
								WritePreferenceString("Time",GetGadgetText(#Time_Time))
								WritePreferenceString("Auf",GetGadgetText(#Auf_Auf))
								WindowEvent()
								Break
						EndSelect
				EndSelect
		EndSelect
	Until p_event=#PB_Event_CloseWindow
	StickyWindow(#Preferences,0)
	CloseWindow(#Preferences)
	DisableWindow(#Fraktale_Fenster,0)
	ClosePreferences()
	Else
		MessageRequester("Achtung!","Um die Einstellungen zu öffnen, bitte zuerst Animationsaufnahme ausschalten!")
	EndIf
EndProcedure

Procedure SaveFractalImage(XStart.d,YStart.d,KX.d,KY.d,SVX.d,SVY.d,KL.d,Aeq)
CopyImage(#Fraktale_Bild,#Fraktale_Copy)
SetGadgetState(#Fraktale_Gadget,ImageID(#Fraktale_Copy))
	Enumeration #PB_Compiler_EnumerationValue
		#Bild
		#showwindow
		#showprogress
	EndEnumeration
	OpenPreferences("Fractal.prefs")
		Select ReadPreferenceString("SaveType","Bitmap - Format")
			Case "Bitmap - Format"
				format=#PB_ImagePlugin_BMP
				en$="bmp"
			Case "JPEG - Format"
				format=#PB_ImagePlugin_JPEG
				en$="jpg"
			Case "PNG - Format"
				format=#PB_ImagePlugin_PNG
				en$="png"
			Default
				format=#PB_ImagePlugin_BMP
				en$="bmp"
		EndSelect
		Select ReadPreferenceString("SaveSize","470 X 470")
			Case "470 X 470"
				auto=1
			Case "512 X 512"
				auto=0
				width=512
			Case "1024 X 1024"
				auto=0
				width=1024
			Case "2048 X 2048"
				auto=0
				width=2048
			Case "4096 X 4096"
				auto=0
				width=4096
			Default
				auto=1
		EndSelect
	ClosePreferences()
	Select auto
		Case 0
			Save$=SaveFileRequester("Speichern unter","","Bild - Dateien|*."+en$,0)
			If Save$<>""
				If GetExtensionPart(Save$)<>en$
					Save$+"."+en$
				EndIf
			Else
				ProcedureReturn 0
			EndIf
			OpenWindow(#showwindow,0,0,400,20,"Bitte warten - Fortschritt - 0%",#PB_Window_WindowCentered,WindowID(#Fraktale_Fenster))
			StickyWindow(#showwindow,1)
			CreateGadgetList(WindowID(#showwindow))
				ProgressBarGadget(#showprogress,0,0,400,20,0,width*width)
			schrittweiteb.d=KL/width
			Dim Pixel(width+1,width+1)
			b.d=YStart
			For PixelY=0 To width
				a.d=XStart
				For PixelX=0 To width
					SVX.d=a
					SVY.d=b
					x.d=KX
					y.d=KY
					Versuche=0
					Betrag.d=0
					While ( Versuche < 255 And Betrag < 5 )
					Versuche = Versuche + 1
					Betrag	 =	x*x + y*y
					
					;Funktions-Beschreibung
					
					Realanteil.d=x*x-y*y	+SVX
					Imaginaeranteil.d=2*x*y	+SVY
					x=Realanteil
					y=Imaginaeranteil
					
					Wend
					gp+1
					Pixel(PixelX,PixelY) = Versuche
					
					a = a + Schrittweiteb
				Next PixelX
				SetGadgetState(#showprogress,gp)
				SetWindowTitle(#showwindow,"Bitte warten - Fortschritt - "+StrF(PixelY/width*100,1)+"%")
				b = b + Schrittweiteb
			Next PixelY
			CreateImage(#Bild,width,width)
			StartDrawing(ImageOutput(#Bild))
			If Aeq=1
				Box(0,0,width,width,RGB(255,255,255))
				For PixelX=0 To width
					For PixelY=0 To width
						If Pixel(PixelX,PixelY+1)<>Pixel(PixelX,PixelY) Or Pixel(PixelX+1,PixelY)<>Pixel(PixelX,PixelY)
								Plot(PixelX,PixelY,RGB(0,0,0))
						Else
							If Pixel(PixelX,PixelY)<51     ;rot-gelb 
						    Plot(PixelX,PixelY,RGB(255,5*Pixel(PixelX,PixelY),0))
						  ElseIf Pixel(PixelX,PixelY)>50 And Pixel(PixelX,PixelY)<102 ;gelb-grün
						    Plot(PixelX,PixelY,RGB(255-5*(Pixel(PixelX,PixelY)-1*51),255,0))
						  ElseIf Pixel(PixelX,PixelY)>101 And Pixel(PixelX,PixelY)<153 ;grün-türkis
						    Plot(PixelX,PixelY,RGB(0,255,5*(Pixel(PixelX,PixelY)-2*51)))
						  ElseIf Pixel(PixelX,PixelY)>152 And Pixel(PixelX,PixelY)<204 ;türkis-blau
						    Plot(PixelX,PixelY,RGB(0,255-5*(Pixel(PixelX,PixelY)-3*51),255))
						  ElseIf Pixel(PixelX,PixelY)>203 And Pixel(PixelX,PixelY)<255 ;blau-violett
						    Plot(PixelX,PixelY,RGB(5*(Pixel(PixelX,PixelY)-4*51),0,255))
						  ElseIf Pixel(PixelX,PixelY)=255 ;weiß
						    Plot(PixelX,PixelY,RGB(255,255,255))
						  EndIf
	  				EndIf
	  			Next PixelY
				Next PixelX
			Else
				Box(0,0,width,width,RGB(0,0,0))
				For PixelX=0 To width
					For PixelY=0 To width
						If Pixel(PixelX,PixelY)<51     ;rot-gelb 
						  Plot(PixelX,PixelY,RGB(255,5*Pixel(PixelX,PixelY),0))
						ElseIf Pixel(PixelX,PixelY)>50 And Pixel(PixelX,PixelY)<102 ;gelb-grün
						  Plot(PixelX,PixelY,RGB(255-5*(Pixel(PixelX,PixelY)-1*51),255,0))
						ElseIf Pixel(PixelX,PixelY)>101 And Pixel(PixelX,PixelY)<153 ;grün-türkis
						  Plot(PixelX,PixelY,RGB(0,255,5*(Pixel(PixelX,PixelY)-2*51)))
						ElseIf Pixel(PixelX,PixelY)>152 And Pixel(PixelX,PixelY)<204 ;türkis-blau
						  Plot(PixelX,PixelY,RGB(0,255-5*(Pixel(PixelX,PixelY)-3*51),255))
						ElseIf Pixel(PixelX,PixelY)>203 And Pixel(PixelX,PixelY)<255 ;blau-violett
						  Plot(PixelX,PixelY,RGB(5*(Pixel(PixelX,PixelY)-4*51),0,255))
						ElseIf Pixel(PixelX,PixelY)=255 ;weiß
						  Plot(PixelX,PixelY,RGB(0,0,0))
						EndIf
					Next PixelY
				Next PixelX
			EndIf
			StopDrawing()
			StickyWindow(#showwindow,0)
			CloseWindow(#showwindow)
			WindowEvent()
			SaveImage(#Bild,Save$,format)
		Case 1
			Save$=SaveFileRequester("Speichern unter","","Bild - Dateien|*."+en$,0)
			If Save$<>""
				If GetExtensionPart(Save$)<>en$
					Save$+"."+en$
				EndIf
				SaveImage(#Fraktale_Bild,Save$,format)
			EndIf
	EndSelect
EndProcedure

Procedure TempImage(XStart.d,YStart.d,KX.d,KY.d,SVX.d,SVY.d,KL.d,Aeq,Group)
	OpenPreferences("Fractal.prefs")
		Select ReadPreferenceString("Auf","470 X 470")
			Case "470 X 470"
				auto=1
			Case "512 X 512"
				auto=0
				width=512
			Case "1024 X 1024"
				auto=0
				width=1024
		EndSelect
	ClosePreferences()
	schrittweiteb.d=KL/width
			Dim Pixel(width+1,width+1)
			b.d=YStart
			For PixelY=0 To width
				a.d=XStart
				For PixelX=0 To width
					SVX.d=a
					SVY.d=b
					x.d=KX
					y.d=KY
					Versuche=0
					Betrag.d=0
					While ( Versuche < 255 And Betrag < 5 )
					Versuche = Versuche + 1
					Betrag	 =	x*x + y*y
					
					;Funktions-Beschreibung
					
					Realanteil.d=x*x-y*y	+SVX
					Imaginaeranteil.d=2*x*y	+SVY
					x=Realanteil
					y=Imaginaeranteil
					
					Wend
					Pixel(PixelX,PixelY) = Versuche
					
					a = a + Schrittweiteb
				Next PixelX
				b = b + Schrittweiteb
			Next PixelY
			CreateImage(#Bild,width,width)
			StartDrawing(ImageOutput(#Bild))
			If Aeq=1
				Box(0,0,width,width,RGB(255,255,255))
				For PixelX=0 To width
					For PixelY=0 To width
						If Pixel(PixelX,PixelY+1)<>Pixel(PixelX,PixelY) Or Pixel(PixelX+1,PixelY)<>Pixel(PixelX,PixelY)
								Plot(PixelX,PixelY,RGB(0,0,0))
						Else
							If Pixel(PixelX,PixelY)<51     ;rot-gelb 
						    Plot(PixelX,PixelY,RGB(255,5*Pixel(PixelX,PixelY),0))
						  ElseIf Pixel(PixelX,PixelY)>50 And Pixel(PixelX,PixelY)<102 ;gelb-grün
						    Plot(PixelX,PixelY,RGB(255-5*(Pixel(PixelX,PixelY)-1*51),255,0))
						  ElseIf Pixel(PixelX,PixelY)>101 And Pixel(PixelX,PixelY)<153 ;grün-türkis
						    Plot(PixelX,PixelY,RGB(0,255,5*(Pixel(PixelX,PixelY)-2*51)))
						  ElseIf Pixel(PixelX,PixelY)>152 And Pixel(PixelX,PixelY)<204 ;türkis-blau
						    Plot(PixelX,PixelY,RGB(0,255-5*(Pixel(PixelX,PixelY)-3*51),255))
						  ElseIf Pixel(PixelX,PixelY)>203 And Pixel(PixelX,PixelY)<255 ;blau-violett
						    Plot(PixelX,PixelY,RGB(5*(Pixel(PixelX,PixelY)-4*51),0,255))
						  ElseIf Pixel(PixelX,PixelY)=255 ;weiß
						    Plot(PixelX,PixelY,RGB(255,255,255))
						  EndIf
	  				EndIf
	  			Next PixelY
				Next PixelX
			Else
				Box(0,0,width,width,RGB(0,0,0))
				For PixelX=0 To width
					For PixelY=0 To width
						If Pixel(PixelX,PixelY)<51     ;rot-gelb 
						  Plot(PixelX,PixelY,RGB(255,5*Pixel(PixelX,PixelY),0))
						ElseIf Pixel(PixelX,PixelY)>50 And Pixel(PixelX,PixelY)<102 ;gelb-grün
						  Plot(PixelX,PixelY,RGB(255-5*(Pixel(PixelX,PixelY)-1*51),255,0))
						ElseIf Pixel(PixelX,PixelY)>101 And Pixel(PixelX,PixelY)<153 ;grün-türkis
						  Plot(PixelX,PixelY,RGB(0,255,5*(Pixel(PixelX,PixelY)-2*51)))
						ElseIf Pixel(PixelX,PixelY)>152 And Pixel(PixelX,PixelY)<204 ;türkis-blau
						  Plot(PixelX,PixelY,RGB(0,255-5*(Pixel(PixelX,PixelY)-3*51),255))
						ElseIf Pixel(PixelX,PixelY)>203 And Pixel(PixelX,PixelY)<255 ;blau-violett
						  Plot(PixelX,PixelY,RGB(5*(Pixel(PixelX,PixelY)-4*51),0,255))
						ElseIf Pixel(PixelX,PixelY)=255 ;weiß
						  Plot(PixelX,PixelY,RGB(0,0,0))
						EndIf
					Next PixelY
				Next PixelX
			EndIf
		StopDrawing()
		SaveImage(#Bild,"Temp\"+Str(Group)+".bmp")
EndProcedure

;-HauptProgramm
	CreateImage(#Fraktale_Bild,470,470)
	CreateImage(#Fraktale_Copy,470,470)
	CreateImage(#ToolBar_Image,16,16)
	StartDrawing(ImageOutput(#ToolBar_Image))
	b=-1.25
			For PixelY=0 To 16
			a=-1.7
				For PixelX=0 To 16
					SeedValueX=a
					SeedValueY=b
					x=0
					y=0
					n=0
					Betrag=0
					While ( n < 255 And Betrag < 5 )
					n = n + 1
					Betrag	 =	x*x + y*y
					Realanteil=x*x-y*y	+SeedValueX
					Imaginaeranteil=2*x*y	+SeedValueY
					x=Realanteil
					y=Imaginaeranteil
					
					Wend
					If n<10
					Plot(PixelX,PixelY,RGB(255,255,255))
					Else
					n=256-n
					Plot(PixelX,PixelY,RGB(Sqr(n)*n+n*n,Log(n)*n,n))
					EndIf
					a = a + 5/32
				Next PixelX
				b = b + 5/32
			Next PixelY
StopDrawing()	
fy=50
fx=90
OpenWindow(#Fraktale_Fenster,0,0,630+fx,620+fy,"Apfelmännchen",#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)
CreateGadgetList(WindowID(#Fraktale_Fenster))
	;MausPosition:
	mpox=485
	mpoy=0+fy
	Frame3DGadget(#Maus_Info,mpox,mpoy,140+fx,75,"Maus")
	TextGadget(#X_Anzeige_Text,mpox+5,mpoy+20,15,20,"X :")
	TextGadget(#X_Anzeige_Zahl,mpox+20,mpoy+17,110+fx,20,"/",#PB_Text_Border)
	TextGadget(#Y_Anzeige_Text,mpox+5,mpoy+45,15,20,"Y :")
	TextGadget(#Y_Anzeige_Zahl,mpox+20,mpoy+42,110+fx,20,"/",#PB_Text_Border)
	;SeedValues
	sevx=485
	sevy=80+fy
	Frame3DGadget(#SeedValue_Info,sevx,sevy,140+fx,105,"Konstanten")
	TextGadget(#SeedValueX_Text,sevx+5,sevy+15,130+fx,20,"Konstante für X :")
	StringGadget(#SeedValueX_Zahl,sevx+5,sevy+30,130+fx,20,StrD(KonstanteX))
	TextGadget(#SeedValueY_Text,sevx+5,sevy+55,130+fx,20,"Konstante für Y :")
	StringGadget(#SeedValueY_Zahl,sevx+5,sevy+70,130+fx,20,StrD(KonstanteY))
	;Startwerte
	stwx=485
	stwy=190+fy
	Frame3DGadget(#Startwerte,stwx,stwy,140,100,"Startwerte")
	TextGadget(#X_Startwert_Text,stwx+5,stwy+15,130,20,"Startwert X :")
	StringGadget(#X_Startwert_Zahl,stwx+5,stwy+30,130,20,StrD(X_Startwert))
	TextGadget(#Y_Startwert_Text,stwx+5,stwy+55,130,20,"Startwert Y :")
	StringGadget(#Y_Startwert_Zahl,stwx+5,stwy+70,130,20,StrD(Y_Startwert))
	;Bild
	frax=0
	fray=0+fy

	ImageGadget(#Fraktale_Gadget,frax,fray,470,470,ImageID(#Fraktale_Bild),#PB_Image_Border)
	;Verlauf
	CreateImage(#Verlauf_Bild,512,100)
	StartDrawing(ImageOutput(#Verlauf_Bild))
	n=0
	Repeat
		If n<51     ;rot-gelb 
		    Box(2*n,0,2,100,RGB(255,5*n,0))
		  ElseIf n>50 And n<102 ;gelb-grün
		    Box(2*n,0,2,100,RGB(255-5*(n-1*51),255,0))
		  ElseIf n>101 And n<153 ;grün-türkis
		    Box(2*n,0,2,100,RGB(0,255,5*(n-2*51)))
		  ElseIf n>152 And n<204 ;türkis-blau
		    Box(2*n,0,2,100,RGB(0,255-5*(n-3*51),255))
		  ElseIf n>203 And n<255 ;blau-violett
		    Box(2*n,0,2,100,RGB(5*(n-4*51),0,255))
		  ElseIf n=255 ;schwarz
		    Box(2*n,0,2,100,RGB(0,0,0))
		EndIf
	n=n+1
	Until n=256
	verx=10
	very=480+fy
	StopDrawing()
	ImageGadget(#Verlauf_Gadget,verx,very,512,100,ImageID(#Verlauf_Bild))
	TextGadget(#Iterationszahl_Skala,verx,very+100,512,20,"Iterations-Tiefe: Niedrig                                                                                                                             Hoch")
	;Buttons
	stax=490
	stay=300+fy
	ButtonGadget(#Start,stax,stay,130+fx,50,"Berechnen")
	AddKeyboardShortcut(#Fraktale_Fenster,#PB_Shortcut_Return,#Start)
	;Iterationstiefe
	itix=485
	itiy=355+fy
	Frame3DGadget(#Iterationstiefe_Info,itix,itiy,140+fx,120,"Iteratoinstiefe")
	CreateImage(#Iterationstiefe_Farbe,127+fx,50)
	ImageGadget(#Iterationstiefe_Gadget,itix+5,itiy+15,127+fx,50,ImageID(#Iterationstiefe_Farbe),#PB_Image_Border)
	TextGadget(#Iterationstiefe_Text,itix+5,itiy+70,130+fx,20,"Iterationstiefe :")
	TextGadget(#Iterationstiefe_Zahl,itix+5,itiy+90,130+fx,20,"",#PB_Text_Border)
	;Zoom-Faktor
	zfkx=635
	zfky=190+fy
	Frame3DGadget(#Zoom_Faktor_Info,zfkx,zfky,-10+fx,100,"Zoom")
	TextGadget(#Zoom_Faktor_Text,zfkx+5,zfky+15,-20+fx,20,"Zoom-Faktor :")
	StringGadget(#Zoom_Faktor_Zahl,zfkx+5,zfky+30,-20+fx,20,StrD(Zoomfaktor,3))
	TextGadget(#Vergroesserung_Info,zfkx+5,zfky+50,-20+fx,20,"Vergrößerung :")
	TextGadget(#Vergroesserung_Text,zfkx+5,zfky+70,-20+fx,20,StrD(Vergroesserung),#PB_Text_Border)
	;ToolBar
	CreateToolBar(#ToolBar_Bar,WindowID(#Fraktale_Fenster))
	ToolBarStandardButton(#ToolBar_New,#PB_ToolBarIcon_New)
	ToolBarToolTip(#ToolBar_Bar,#ToolBar_New,"Neu")
	ToolBarStandardButton(#ToolBar_Open,#PB_ToolBarIcon_Open)
	ToolBarToolTip(#ToolBar_Bar,#ToolBar_Open,"Bereits vorhandene Dateien öffnen")
	ToolBarStandardButton(#ToolBar_Save,#PB_ToolBarIcon_Save)
	ToolBarToolTip(#ToolBar_Bar,#ToolBar_Save,"Aktuelle Werte in Datei speichern")
	ToolBarSeparator()
	CreateImage(#Bitmap,16,16)
	CopyImage(#ToolBar_Image,#Bitmap)
	StartDrawing(ImageOutput(#Bitmap))
	LineXY(1,3,5,3,RGB(255,0,0))
	LineXY(5,3,5,1,RGB(255,0,0))
	LineXY(5,1,9,5,RGB(255,0,0))
	LineXY(9,5,5,9,RGB(255,0,0))
	LineXY(5,9,5,7,RGB(255,0,0))
	LineXY(5,7,1,7,RGB(255,0,0))
	LineXY(1,7,1,3,RGB(255,0,0))
	FillArea(2,4,RGB(255,0,0),RGB(230,230,150))
	StopDrawing()
	ToolBarImageButton(#ToolBar_Print_Datei,ImageID(#Bitmap))
	ToolBarToolTip(#ToolBar_Bar,#ToolBar_Print_Datei,"Aktuelles Bild als Bitmap speichern")
	ToolBarSeparator()
	ToolBarImageButton(#ToolBar_Info,ImageID(#ToolBar_Image))
	ToolBarToolTip(#ToolBar_Bar,#ToolBar_Info,"Info zum Programm")
	;Menu
	CreateMenu(#Menu,WindowID(#Fraktale_Fenster))
	MenuTitle("&Datei")
		MenuItem(#ToolBar_New,"&Neu"+Chr(9)+"Strg + N")
		AddKeyboardShortcut(#Fraktale_Fenster,#PB_Shortcut_Control|#PB_Shortcut_N,#ToolBar_New)
		MenuItem(#ToolBar_Open,"Ö&ffnen"+Chr(9)+"Strg + O")
		AddKeyboardShortcut(#Fraktale_Fenster,#PB_Shortcut_Control|#PB_Shortcut_O,#ToolBar_Open)
		MenuItem(#ToolBar_Save,"&Speichern"+Chr(9)+"Strg + S")
		AddKeyboardShortcut(#Fraktale_Fenster,#PB_Shortcut_Control|#PB_Shortcut_S,#ToolBar_Save)
		MenuBar()
		MenuItem(#ToolBar_Print_Datei,"&Als Bitmap speichern"+Chr(9)+"Strg + B")
		AddKeyboardShortcut(#Fraktale_Fenster,#PB_Shortcut_Control|#PB_Shortcut_B,#ToolBar_Print_Datei)
		MenuBar()
		MenuItem(69,"&Einstellungen")
		MenuBar()
		MenuItem(60,"&Beenden"+Chr(9)+"Alt + F4")
	MenuTitle("&Beispiele")
		OpenSubMenu("&Apfelmännchen - Fraktale")
		MenuItem(61,"&Tal der Seepferdchen")
		MenuItem(62,"&Doppelspirale")
		MenuItem(63,"&Blitz")
		MenuItem(64,"&Flammen")
		CloseSubMenu()
	MenuTitle("&Hilfe")
		MenuItem(#ToolBar_Info,"&Info zum Programm"+Chr(9)+"F1")
		AddKeyboardShortcut(#Fraktale_Fenster,#PB_Shortcut_F1,#ToolBar_Info)
		MenuItem(68,"&Benutzung des Programms")
	;Fraktal-Arten-Auswahl
	faax=527
	faay=483+fy
	Frame3DGadget(#Aequipotentiallinien,faax,faay,98+fx,57,"Äquipotentiallinienstatus")
	OptionGadget(#Nein,faax+3,faay+12,92+fx,20,"ausgeschaltet")
	OptionGadget(#Ja,faax+3,faay+32,92+fx,20,"eingeschaltet")
	SetGadgetState(#Nein,1)
	If Parameter$<>""
		If GetExtensionPart(Parameter$)="frac"
			OpenPreferences(Parameter$)
			X_Startwert=ReadPreferenceDouble("X_Startwert",-2.5):Y_Startwert=ReadPreferenceDouble("Y_Startwert",-2.5):KantenlaengeOriginal=ReadPreferenceDouble("KantenlaengeOriginal",5):KantenlaengePixel=ReadPreferenceDouble("KantenlaengePixel",470):Schrittweite=KantenlaengeOriginal/KantenlaengePixel:Vergroesserung=ReadPreferenceDouble("Vergroesserung",1):KonstanteX=ReadPreferenceDouble("KonstanteX",0):KonstanteY=ReadPreferenceDouble("KonstanteY",0):Aequipotentiallinien=ReadPreferenceDouble("Aequipotentiallinien",0):SeedValueX=ReadPreferenceDouble("SeedValueX",0):SeedValueY=ReadPreferenceDouble("SeedValueY",0)
			ClosePreferences()
			Berechne_Fraktale()
			If Aequipotentiallinien=1
				SetGadgetState(#Ja,1)
			Else
				SetGadgetState(#Nein,1)
			EndIf
				SetGadgetText(#Vergroesserung_Text,StrD(Vergroesserung)):SetGadgetText(#X_Startwert_Zahl,StrD(X_Startwert)):SetGadgetText(#Y_Startwert_Zahl,StrD(Y_Startwert)):SetGadgetState(#Fraktale_Gadget,ImageID(#Fraktale_Bild))
		EndIf
	Else
		Berechne_Fraktale()
	EndIf
	Goto NewCursor
;-Ereignisschleife
Repeat
EventID=WaitWindowEvent()
Maus_X_aktuell=WindowMouseX(#Fraktale_Fenster)
Maus_Y_aktuell=WindowMouseY(#Fraktale_Fenster)-fy
	Select EventID
		Case #PB_Event_Gadget
			Select EventGadget()
				Case #Start
					start:
					Berechne_Fraktale()
					SetGadgetText(#Vergroesserung_Text,StrD(Vergroesserung))
					SetGadgetText(#X_Startwert_Zahl,StrD(X_Startwert))
					SetGadgetText(#Y_Startwert_Zahl,StrD(Y_Startwert))
					Goto NewCursor
				Case #SeedValueX_Zahl
					KonstanteX=ValD(GetGadgetText(#SeedValueX_Zahl))
				Case #SeedValueY_Zahl
					KonstanteY=ValD(GetGadgetText(#SeedValueY_Zahl))
				Case #X_Startwert_Zahl
					X_Startwert=ValD(GetGadgetText(#X_Startwert_Zahl))
				Case #Y_Startwert_Zahl
					Y_Startwert=ValD(GetGadgetText(#Y_Startwert_Zahl))
				Case #Zoom_Faktor_Zahl
					Zoomfaktor=ValD(GetGadgetText(#Zoom_Faktor_Zahl))
					Goto NewCursor
				Case #Ja
					Aequipotentiallinien=1
					StartDrawing(ImageOutput(#Fraktale_Bild))
					Box(0,0,470,470,RGB(255,255,255))
					For PixelX=0 To 470
						For PixelY=0 To 470
							If Iteration(PixelX,PixelY+1)<>Iteration(PixelX,PixelY) Or Iteration(PixelX+1,PixelY)<>Iteration(PixelX,PixelY)
									Plot(PixelX,PixelY,RGB(0,0,0))
							Else
								If Iteration(PixelX,PixelY)<51     ;rot-gelb 
							    Plot(PixelX,PixelY,RGB(255,5*Iteration(PixelX,PixelY),0))
							  ElseIf Iteration(PixelX,PixelY)>50 And Iteration(PixelX,PixelY)<102 ;gelb-grün
							    Plot(PixelX,PixelY,RGB(255-5*(Iteration(PixelX,PixelY)-1*51),255,0))
							  ElseIf Iteration(PixelX,PixelY)>101 And Iteration(PixelX,PixelY)<153 ;grün-türkis
							    Plot(PixelX,PixelY,RGB(0,255,5*(Iteration(PixelX,PixelY)-2*51)))
							  ElseIf Iteration(PixelX,PixelY)>152 And Iteration(PixelX,PixelY)<204 ;türkis-blau
							    Plot(PixelX,PixelY,RGB(0,255-5*(Iteration(PixelX,PixelY)-3*51),255))
							  ElseIf Iteration(PixelX,PixelY)>203 And Iteration(PixelX,PixelY)<255 ;blau-violett
							    Plot(PixelX,PixelY,RGB(5*(Iteration(PixelX,PixelY)-4*51),0,255))
							  ElseIf Iteration(PixelX,PixelY)=255 ;weiß
							    Plot(PixelX,PixelY,RGB(255,255,255))
							  EndIf
		  				EndIf
		  			Next PixelY
					Next PixelX
					StopDrawing()
					Goto NewCursor
				Case #Nein
					Aequipotentiallinien=0
					StartDrawing(ImageOutput(#Fraktale_Bild))
					Box(0,0,470,470,RGB(0,0,0))
					For PixelX=0 To 470
						For PixelY=0 To 470
							If Iteration(PixelX,PixelY)<51     ;rot-gelb 
							  Plot(PixelX,PixelY,RGB(255,5*Iteration(PixelX,PixelY),0))
							ElseIf Iteration(PixelX,PixelY)>50 And Iteration(PixelX,PixelY)<102 ;gelb-grün
							  Plot(PixelX,PixelY,RGB(255-5*(Iteration(PixelX,PixelY)-1*51),255,0))
							ElseIf Iteration(PixelX,PixelY)>101 And Iteration(PixelX,PixelY)<153 ;grün-türkis
							  Plot(PixelX,PixelY,RGB(0,255,5*(Iteration(PixelX,PixelY)-2*51)))
							ElseIf Iteration(PixelX,PixelY)>152 And Iteration(PixelX,PixelY)<204 ;türkis-blau
							  Plot(PixelX,PixelY,RGB(0,255-5*(Iteration(PixelX,PixelY)-3*51),255))
							ElseIf Iteration(PixelX,PixelY)>203 And Iteration(PixelX,PixelY)<255 ;blau-violett
							  Plot(PixelX,PixelY,RGB(5*(Iteration(PixelX,PixelY)-4*51),0,255))
							ElseIf Iteration(PixelX,PixelY)=255 ;weiß
							  Plot(PixelX,PixelY,RGB(0,0,0))
							EndIf
						Next PixelY
					Next PixelX
					StopDrawing()
					Goto NewCursor
			EndSelect
		Case #PB_Event_CloseWindow
			CloseWindow(#Fraktale_Fenster)
			Break
		Case #PB_Event_Menu
			Select EventMenu()
				Case #Start
					Goto start
				Case #ToolBar_New
					If Movie=1
					MessageRequester("Achtung!","Bitte schließen Sie zuerst die Animationsaufnahme!")
					Else
					KonstanteX=0
					KonstanteY=0
					X_Startwert=-2.5
					Y_Startwert=-2.5
					KantenlaengeOriginal=5
					Schrittweite=KantenlaengeOriginal/KantenlaengePixel
					Vergroesserung=1
					Berechne_Fraktale():SetGadgetText(#SeedValueX_Zahl,StrD(KonstanteX)):SetGadgetText(#SeedValueY_Zahl,StrD(KonstanteY)):SetGadgetText(#Vergroesserung_Text,StrD(Vergroesserung)):SetGadgetText(#X_Startwert_Zahl,StrD(X_Startwert)):SetGadgetText(#Y_Startwert_Zahl,StrD(Y_Startwert)):Goto NewCursor
					EndIf
				Case #ToolBar_Open
					If Movie=1
						MessageRequester("Achtung!","Bitte schließen Sie zuerst die Animationsaufnahme!")
					Else
					Open$=OpenFileRequester("Öffnen","","Fraktal - Dateien (*.frac)|*.frac|Fraktal - Animationen (*.fmov)|*.fmov",0)
						If Open$<>""
							If GetExtensionPart(Open$)="frac"
								OpenPreferences(Open$)
									X_Startwert=ReadPreferenceDouble("X_Startwert",-2.5):Y_Startwert=ReadPreferenceDouble("Y_Startwert",-2.5):KantenlaengeOriginal=ReadPreferenceDouble("KantenlaengeOriginal",5):KantenlaengePixel=ReadPreferenceDouble("KantenlaengePixel",470):Schrittweite=KantenlaengeOriginal/KantenlaengePixel:Vergroesserung=ReadPreferenceDouble("Vergroesserung",1):KonstanteX=ReadPreferenceDouble("KonstanteX",0):KonstanteY=ReadPreferenceDouble("KonstanteY",0):Aequipotentiallinien=ReadPreferenceDouble("Aequipotentiallinien",0):SeedValueX=ReadPreferenceDouble("SeedValueX",0):SeedValueY=ReadPreferenceDouble("SeedValueY",0)
									If KantenlaengeOriginal=0
										KantenlaengeOriginal=5/Vergroesserung
										Schrittweite=KantenlaengeOriginal/KantenlaengePixel
									EndIf
								ClosePreferences()
								Berechne_Fraktale()
									If Aequipotentiallinien=1
										SetGadgetState(#Ja,1)
									Else
										SetGadgetState(#Nein,1)
									EndIf
								SetGadgetText(#Vergroesserung_Text,StrD(Vergroesserung)):SetGadgetText(#X_Startwert_Zahl,StrD(X_Startwert)):SetGadgetText(#Y_Startwert_Zahl,StrD(Y_Startwert)):Goto NewCursor
							EndIf
						EndIf
					EndIf
				Case #ToolBar_Save
					Save$=SaveFileRequester("Speichern unter","","Fraktal - Dateien (*.frac)|*.frac",0)
					If Save$<>""
						If GetExtensionPart(Save$)<>"frac"
							Save$+".frac"
						EndIf
					CreatePreferences(Save$)
						WritePreferenceString("X_Startwert",StrD(X_Startwert,20))
						WritePreferenceString("Y_Startwert",StrD(Y_Startwert,20))
						WritePreferenceString("KantenlaengeOriginal",StrD(KantenlaengeOriginal,20))
						WritePreferenceString("KantenlaengePixel",StrD(KantenlaengePixel,20))
						WritePreferenceString("Vergroesserung",StrD(Vergroesserung,20))
						WritePreferenceString("KonstanteX",StrD(KonstanteX,20))
						WritePreferenceString("KonstanteY",StrD(KonstanteY,20))
						WritePreferenceString("Aequipotentiallinien",StrD(Aequipotentiallinien,20))
						WritePreferenceString("SeedValueX",StrD(SeedValueX,20))
						WritePreferenceString("SeedValueY",StrD(SeedValueY,20))
					ClosePreferences()
					EndIf
				Case #ToolBar_Print_Datei
					SaveFractalImage(X_Startwert,Y_Startwert,KonstanteX,KonstanteY,SeedValueX,SeedValueY,KantenlaengeOriginal,Aequipotentiallinien)
				Case #ToolBar_Info
					MessageRequester("Info","Apfelmännchen v.1.0"+Chr(10)+"Programming:Olaf Leismann"+Chr(10)+"Date: 04.2006"+Chr(10)+"*.frac - Files v.1.0")
				Case 61
					If Movie=1
					MessageRequester("Achtung!","Bitte schließen Sie zuerst die Animationsaufnahme!")
					Else
					X_Startwert=-0.755171
					Y_Startwert=0.124949
					KantenlaengeOriginal=5/216
					Schrittweite=KantenlaengeOriginal/KantenlaengePixel
					Vergroesserung=216
					Berechne_Fraktale()
					SetGadgetText(#Vergroesserung_Text,StrD(Vergroesserung))
					SetGadgetText(#X_Startwert_Zahl,StrD(X_Startwert))
					SetGadgetText(#Y_Startwert_Zahl,StrD(Y_Startwert))
					Goto NewCursor
					EndIf
				Case 62
					If Movie=1
					MessageRequester("Achtung!","Bitte schließen Sie zuerst die Animationsaufnahme!")
					Else
					X_Startwert=-0.76477
					Y_Startwert=-0.095514
					KantenlaengeOriginal=5/3888
					Schrittweite=KantenlaengeOriginal/KantenlaengePixel
					Vergroesserung=3888
					Berechne_Fraktale()
					SetGadgetText(#Vergroesserung_Text,StrD(Vergroesserung))
					SetGadgetText(#X_Startwert_Zahl,StrD(X_Startwert))
					SetGadgetText(#Y_Startwert_Zahl,StrD(Y_Startwert))
					Goto NewCursor
					EndIf
				Case 63
					If Movie=1
					MessageRequester("Achtung!","Bitte schließen Sie zuerst die Animationsaufnahme!")
					Else
					X_Startwert=-1.45
					Y_Startwert=0.03
					KantenlaengeOriginal=5/36
					Schrittweite=KantenlaengeOriginal/KantenlaengePixel
					Vergroesserung=36
					Berechne_Fraktale()
					SetGadgetText(#Vergroesserung_Text,StrD(Vergroesserung))
					SetGadgetText(#X_Startwert_Zahl,StrD(X_Startwert))
					SetGadgetText(#Y_Startwert_Zahl,StrD(Y_Startwert))
					Goto NewCursor
					EndIf
				Case 64
					If Movie=1
					MessageRequester("Achtung!","Bitte schließen Sie zuerst die Animationsaufnahme!")
					Else
					X_Startwert=-0.967691
					Y_Startwert=-0.338603
					KantenlaengeOriginal=5/54
					Schrittweite=KantenlaengeOriginal/KantenlaengePixel
					Vergroesserung=54
					Berechne_Fraktale()
					SetGadgetText(#Vergroesserung_Text,StrD(Vergroesserung))
					SetGadgetText(#X_Startwert_Zahl,StrD(X_Startwert))
					SetGadgetText(#Y_Startwert_Zahl,StrD(Y_Startwert))
					Goto NewCursor
					EndIf
				Case 60
					If Movie=1
					MessageRequester("Achtung!","Bitte schließen Sie zuerst die Animationsaufnahme!")
					Else
					CloseWindow(#Fraktale_Fenster)
					Break
					EndIf
				Case 68
					Benutzung:
					MessageRequester("Hilfe","Kurzbeschreibung des Programms:"+Chr(10)+Chr(10)+"Mit diesem Programm können Apfelmännchen - Fraktale"+Chr(10)+"dargestellt, erstellt, gespeichert und abfotografiert"+Chr(10)+"werden (Bildgröße limitiert auf 470 X 470 Pixel)."+Chr(10)+Chr(10)+"Manchmal kann der Bildaufbau etwas Zeit in anspruch"+Chr(10)+"nehmen, da pro Bild teilweise einige Mrd. Rechnungen"+Chr(10)+"durchgeführt werden müssen."+Chr(10)+Chr(10)+"Bedienung:"+Chr(10)+Chr(10)+"Wenn Sie mit dem Cursor auf den gewünschten Bereich mit der"+Chr(10)+"linken Maustaste klicken, wird der Bereich um den gewünschten"+Chr(10)+"Zoom - Faktor vergrößert."+Chr(10)+"Wenn Sie das gleiche mit der rechten Maustaste machen,"+Chr(10)+"wird der aktuelle Bereich um den Zoom - Faktor verkleinert und"+Chr(10)+"es wird wieder ein größerer Bereich Sichtbar."+Chr(10)+Chr(10)+"Äquipotentiallinien:"+Chr(10)+Chr(10)+"eingechaltet: zwichen den unterschiedlichen Iterationstiefen"+Chr(10)+"                      werden Trennlinien (Äquipotentiallinien) angezeigt."+Chr(10)+"ausgeschaltet: es werden keine Äquipotentiallinien angezeigt."+Chr(10)+Chr(10)+"In allen anderen Feldern können Sie die Werte"+Chr(10)+"beliebig ändern (z.B. um zu sehen, was passiert)."+Chr(10)+Chr(10)+"                                       Viel Spaß!  :-)")
				Case 69
					OpenPreferenceWindow()
			EndSelect
	EndSelect
	Select EventType()
		Case #PB_EventType_LeftClick
			If Maus_X_aktuell>0 And Maus_X_aktuell<KantenLaengePixel And Maus_Y_aktuell >0 And Maus_Y_aktuell <KantenlaengePixel
				X_Startwert=X_Startwert+Schrittweite*(Maus_X_aktuell-KantenlaengePixel/2/Zoomfaktor)
				Y_Startwert=Y_Startwert+Schrittweite*(Maus_Y_aktuell-KantenlaengePixel/2/Zoomfaktor)
				KantenlaengeOriginal=Schrittweite*KantenlaengePixel/Zoomfaktor
				Schrittweite=KantenlaengeOriginal/KantenlaengePixel
				Vergroesserung=Vergroesserung*Zoomfaktor
				Berechne_Fraktale()
				SetGadgetText(#Vergroesserung_Text,StrD(Vergroesserung))
				SetGadgetText(#X_Startwert_Zahl,StrD(X_Startwert))
				SetGadgetText(#Y_Startwert_Zahl,StrD(Y_Startwert))
				Goto NewCursor
			EndIf
		Case #PB_EventType_RightClick
			If Maus_X_aktuell>0 And Maus_X_aktuell<KantenLaengePixel And Maus_Y_aktuell >0 And Maus_Y_aktuell <KantenlaengePixel
				X_Startwert=X_Startwert+Schrittweite*(Maus_X_aktuell-KantenlaengePixel/2*Zoomfaktor)
				Y_Startwert=Y_Startwert+Schrittweite*(Maus_Y_aktuell-KantenlaengePixel/2*Zoomfaktor)
				KantenlaengeOriginal=Schrittweite*KantenlaengePixel*Zoomfaktor
				Schrittweite=KantenlaengeOriginal/KantenlaengePixel
				Vergroesserung=Vergroesserung/Zoomfaktor
				Berechne_Fraktale()
				SetGadgetText(#Vergroesserung_Text,StrD(Vergroesserung))
				SetGadgetText(#X_Startwert_Zahl,StrD(X_Startwert))
				SetGadgetText(#Y_Startwert_Zahl,StrD(Y_Startwert))
				Goto NewCursor
			EndIf
	EndSelect
If Maus_X_aktuell <> Maus_X_vorher Or Maus_Y_aktuell <> Maus_Y_vorher
	NewCursor:
  If Maus_X_aktuell>0 And Maus_X_aktuell<KantenlaengePixel And Maus_Y_aktuell>0 And Maus_Y_aktuell < KantenlaengePixel
   SetGadgetText(#X_Anzeige_Zahl, StrD(X_Startwert + Schrittweite * Maus_X_aktuell))
   SetGadgetText(#Y_Anzeige_Zahl, StrD(-Y_Startwert - Schrittweite * Maus_Y_aktuell))
   CopyImage(#Fraktale_Bild,#Fraktale_Copy)
   If Aequipotentiallinien=1
   	boxcolor=RGB(128,128,128)
   Else
   	boxcolor=RGB(255,255,255)
   EndIf
   StartDrawing(ImageOutput(#Fraktale_Copy))
   DrawingMode(#PB_2DDrawing_Outlined)
   Box(Maus_X_aktuell-235/Zoomfaktor,Maus_Y_aktuell-235/Zoomfaktor,470/Zoomfaktor,470/Zoomfaktor,boxcolor)
   DrawingMode(#PB_2DDrawing_Default)
   StopDrawing()
   IterationDepth()
   SetGadgetState(#Iterationstiefe_Gadget,ImageID(#Iterationstiefe_Farbe))
   SetGadgetState(#Fraktale_Gadget,ImageID(#Fraktale_Copy))
  Else
   SetGadgetText(#X_Anzeige_Zahl, "/"):SetGadgetText(#Y_Anzeige_Zahl, "/"):StartDrawing(ImageOutput(#Iterationstiefe_Farbe))
   Box(0,0,127+fx,50)
   DrawingMode(1)
   FrontColor(RGB(255,255,255))
   DrawText(10,15,"Pointer outside Fractal Area")
   StopDrawing()
   SetGadgetState(#Iterationstiefe_Gadget,ImageID(#Iterationstiefe_Farbe))
   SetGadgetText(#Iterationstiefe_Zahl,"/")
   CopyImage(#Fraktale_Bild,#Fraktale_Copy)
   SetGadgetState(#Fraktale_Gadget,ImageID(#Fraktale_Copy))
  EndIf 
   Maus_X_vorher = Maus_X_aktuell
   Maus_Y_vorher = Maus_Y_aktuell
EndIf
Delay(10)
ForEver
Benutzeravatar
winduff
Beiträge: 879
Registriert: 10.02.2006 21:05
Wohnort: Gießen
Kontaktdaten:

Beitrag von winduff »

schicke sache, gefällt mir!

Macht Spaß ;-)

Vorallem mit den Äguipotentiallinien eingeschaltet!
Bild
AND51 hat geschrieben:...und ich würde dein Programm aus Wut zwei mal installieren, um eines genüsslicher löschen zu können, als das andere...
Benutzeravatar
dige
Beiträge: 1241
Registriert: 08.09.2004 08:53

Beitrag von dige »

@Olaf: Respekt! :allright:
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
mk-soft
Beiträge: 3856
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

TOP :allright: :allright: :allright:

Hatte ich mal vor ewigkeiten auf ein PC-XT (8MHz) in Pascal geschieben
Rechenzeit ca. 9 Stunden :lol:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Helle
Beiträge: 566
Registriert: 11.11.2004 16:13
Wohnort: Magdeburg

Beitrag von Helle »

Als Vorbereitung für einen 80-Bit-FPU-Test ist folgendes Apfelmännchen-Programm mit Double-Auflösung entstanden.
Viel Spass :) !

Code: Alles auswählen

 ;- Apfelmännchen von "Helle" Klaus Helbing, 26.09.2006, PB4.00
 ;- Grundalgorithmus mit Anregungen von F.Weil, Froggerprogger u.v.a.
 ;- Es kam nicht auf Geschwindigkeits-Optimierung an sondern auf das, was bei grossen
 ;- Zoomfaktoren noch sichtbar ist. Soll Grundlage sein für eine 80-Bit-FPU-Variante.
 ;- Zoomfaktor veränderbar mit "+"- bzw. "-"-Taste des Ziffernblockes. Grössere Sprünge 
 ;- sind durch gleichzeitiges Drücken von "Strg links" erreichbar. 
 ;- Iterationstiefe veränderbar mit "Bild hoch" und "Bild runter".
 ;- Grafik verschieben mit den 4 Pfeiltasten.
 ;- Während der Grafik-Berechnung (Anzeige "Busy") sind keine Veränderungen möglich! 
 ;- Die Maus dient hier nur der Orientierung.
   
 If InitKeyboard() = 0 Or InitMouse() = 0
   MessageRequester("Fehler!", "DirectX-Initialisierung fehlgeschlagen", #MB_ICONSTOP)
   End
 EndIf

 If OpenWindow(0, 0, 0, 1024, 718, "Apfelmännchen-Test", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_Maximize) And CreateGadgetList(WindowID(0)) = 0
   MessageRequester("Fehler!","Hier stimmt was nicht!")
 EndIf 

TextGadget(1, 10, 702, 50, 20, "")     ;für Betriebs-Status
TextGadget(2, 125, 702, 200, 20, "Zoomfaktor = 1")
TextGadget(3, 350, 702, 200, 20, "Iterationstiefe = 150")
TextGadget(4, 575, 702, 200, 20, "")   ;für Mausposition X 
TextGadget(5, 800, 702, 200, 20, "")   ;für Mausposition Y

Global TEXT1$ = "Busy"
Global TEXT1A$ = "Ready"

Global IterCounter.l
Global ScreenColor.l         ;Farbe des Bildpunktes
Global MaxIter.l = 150       ;max. Iterationstiefe
Global AchseX.d = 1.25       ;oberer Bildschirmrand 
Global AchseY.d = -2.0       ;linker Bildschirmrand
Global Zoom.d = 1.0   
Global ScreenX.d = 1024 
Global ScreenY.d = 701       ;701 wegen Y-Koordinate = 0      
Global Breite.d = 3.0
Global Hoehe.d = 2.5
Global TermX.d
Global TermY.d
Global zx.d
Global zy.d
Global zz.d
Global PowZX.d 
Global PowZY.d 
Global X1.d = Breite / ScreenX 
Global Y1.d = -Hoehe / ScreenY  
Global MX.d                  ;Mausposition X
Global MY.d                  ;Mausposition Y
Global VersatzY.d
Global VersatzX.d

;- Grundalgorithmus als Prozedur      
Procedure frac() 
  SetGadgetText(1, TEXT1$)

  For Y= 0 To 700
   TermY = Y * Y1 + AchseX   
     For X = 0 To 1023 
      TermX = X * X1 + AchseY
      zx = 0 
      zy = 0 
      IterCounter = 0 
      PowZX = 0 
      PowZY = 0 
      While (PowZX + PowZY) < 4 And (IterCounter < MaxIter) 
        zz = PowZX - PowZY + TermX 
        zy = 2 * zx * zy + TermY 
        zx = zz 
        IterCounter + 1 
        PowZX = zx * zx 
        PowZY = zy * zy 
      Wend 
 
   ScreenColor = 0           ;erstmal schwarz

  If IterCounter < MaxIter
     ScreenColor = $1f87000  ;je nach Geschmack
     IterCounter & 31        ;"   "       "
     ScreenColor >> IterCounter
  EndIf
  
    Plot(X, Y, ScreenColor)  ;mal sehen...
      
     Next 
  Next 
EndProcedure     
    
       StartDrawing(WindowOutput(0))
       DrawingMode(1) 

       frac()                ;"Ausgangsgrafik" berechnen und zeichnen

;-------- Ereignisabfrage
Repeat
  Delay(10) 

  SetGadgetText(1, TEXT1A$)  ;"Ready"

  MX = WindowMouseX(0)
  MY = WindowMouseY(0)
    
   TEXT4$ = "X-Postion = " + StrD((3 * MX / 1023) / Zoom - 2.0 / Zoom - VersatzX, 15)  ;3=Fractalbreite -2 bis +1
  SetGadgetText(4, TEXT4$)         
 
   TEXT5$ = "Y-Postion = " + StrD((-2.5 * MY / 700)/Zoom + 1.25 / Zoom - VersatzY, 15) ;-2.5=Fractalhöhe 1.25 bis -1.25  
  SetGadgetText(5, TEXT5$)         
        
      Eventid = WindowEvent()

      ExamineKeyboard()
      If KeyboardPushed(#PB_Key_Escape)     ;Esc zum schnellen Beenden
       StopDrawing()
       End
      EndIf

;-------- Zoomfaktor erhöhen
      If KeyboardPushed(#PB_Key_Add) And Zoom < 614891469123651871   ;"+" -Taste auf Ziffernblock!   Q_max/1.5
        If KeyboardPushed(#PB_Key_LeftControl) And Zoom > 4
          Zoom * 1.5
         Else
          Zoom + 1.0
        EndIf

     X1 = Breite / ScreenX / Zoom 
     AchseY = (-2.0 / Zoom) - VersatzX 
     Y1 = -Hoehe / ScreenY / Zoom 
     AchseX = 1.25 / Zoom - VersatzY

   TEXT2$ = "Zoomfaktor = " + StrU(Zoom, 4)
  SetGadgetText(2, TEXT2$)   
           
      frac()
      EndIf    

;-------- Zoomfaktor verringern    
      If KeyboardPushed(#PB_Key_Subtract) And Zoom > 1.5   ;"-" -Taste auf Ziffernblock! 
        If KeyboardPushed(#PB_Key_LeftControl) And Zoom > 6
          Zoom / 1.5
         Else
          Zoom - 1.0
        EndIf       

     X1 = Breite / ScreenX / Zoom 
     AchseY = (-2.0 / Zoom) - VersatzX 
     Y1 = -Hoehe / ScreenY / Zoom 
     AchseX = (1.25 / Zoom) - VersatzY
  
   TEXT2$ = "Zoomfaktor = " + StrU(Zoom, 4)
  SetGadgetText(2, TEXT2$)         
            
      frac()
      EndIf      

;-------- Iterationstiefe erhöhen  
      If KeyboardPushed(#PB_Key_PageUp)     ;"Bild hoch"
        MaxIter + 50
   TEXT3$ = "Iterationstiefe = " + Str(MaxIter)
  SetGadgetText(3, TEXT3$)             
        frac()
      EndIf    

;-------- Iterationstiefe verringern    
      If KeyboardPushed(#PB_Key_PageDown)   ;"Bild runter" 
        MaxIter - 50
   TEXT3$ = "Iterationstiefe = " + Str(MaxIter)
  SetGadgetText(3, TEXT3$)   
        frac()
      EndIf        

;-------- Verschieben nach links  
      If KeyboardPushed(#PB_Key_Left)       ;"Pfeil links"
        MX = Breite / 4
        MX / Zoom        
        VersatzX = VersatzX - MX 
        AchseY = AchseY + MX                
        frac()
      EndIf    

;-------- Verschieben nach rechts    
      If KeyboardPushed(#PB_Key_Right)      ;"Pfeil rechts" 
        MX = Breite / 4
        MX / Zoom
        VersatzX = VersatzX + MX 
        AchseY = AchseY - MX        
        frac()
      EndIf          

;-------- Verschieben nach oben  
      If KeyboardPushed(#PB_Key_Up)         ;"Pfeil hoch"
        MX = Hoehe / 4
        MX / Zoom 
        VersatzY = VersatzY + MX 
        AchseX = AchseX - MX                
        frac()
      EndIf    
 
;-------- Verschieben nach unten    
      If KeyboardPushed(#PB_Key_Down)       ;"Pfeil runter" 
        MX = Hoehe / 4
        MX / Zoom    
        VersatzY = VersatzY - MX 
        AchseX = AchseX + MX                        
        frac()
      EndIf            

Until Eventid = #PB_Event_CloseWindow 
StopDrawing()
End 
Gruss
Helle
Benutzeravatar
dige
Beiträge: 1241
Registriert: 08.09.2004 08:53

Beitrag von dige »

Stark! Geht ja scheinbar endlos :)
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Ich find das "Tal der Seepferdchen"-Fraktal am besten, da sieht man jedesmal wieder das, was dem Ursprung entspricht :) das normale Apfelmännchen wird beim starken hineinzoomen nicht mehr besonders erkennbar, aber liegt wohl in der "Natur" der Dinge ;)

Stufenloser Zoom wäre auch ganz cool aber ich glaube dafür bräuchte man ganz andere Maschinen ;)
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8812
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Hier noch mein Appleman-Thread: http://www.purebasic.fr/german/viewtopic.php?t=7599

Interessant ist es, wenn man mit den Farben rumspielt. Also ob man sie
logarithmiert, wurzel zieht, quadriert, exponentiert, invertiert oder ähnliches
und dann verschiedene Farbschemen darüber benutzt.
Mein Appleman hat zwar ein Interface dafür im Code, aber ich hab noch
keine solchen Sachen eingebaut, weils irgendwann langweilig war,
weiterzuproggen. :wink:
Antworten