Benoit Mandelbrot Died on October 14 @ 85
Posted: Sun Oct 17, 2010 6:05 pm
http://www.purebasic.com
https://www.purebasic.fr/english/
Code: Select all
Enumeration
#Window : #Gadget : #Image : #Timer : #Button
EndEnumeration
#Size = 150
Structure Complex
Re.f : Im.f
EndStructure
Procedure HSV(Hue.f, Saturation.f, Value.f)
Protected H = Int(Hue/60)
Protected f.f = (Hue/60-H)
Protected S.f = Saturation
Protected V.f = Value * 255
Protected p = V * (1-S)
Protected q = V * (1-S*f)
Protected t = V * (1-S*(1-f))
Select H
Case 1 : ProcedureReturn RGB(q,V,p)
Case 2 : ProcedureReturn RGB(p,V,t)
Case 3 : ProcedureReturn RGB(p,q,V)
Case 4 : ProcedureReturn RGB(t,p,V)
Case 5 : ProcedureReturn RGB(V,p,q)
Default : ProcedureReturn RGB(V,t,p)
EndSelect
EndProcedure
Procedure.d ComplexAngle(*Complex.Complex)
Protected Angle.f
With *Complex
Angle = ATan(\Im/\Re)
If \Re < 0 : Angle + #PI : ElseIf Angle < 0 : Angle + 2*#PI : EndIf
EndWith
ProcedureReturn Angle
EndProcedure
Global Dim Iteration.Complex(#Size*3, #Size*2)
Procedure CustomCallback(x, y, Color1, Color2)
Protected Add.Complex : Add\Re = x/#Size-2 : Add\Im = y/#Size-1
Protected Angle.f, Length.f, Darkness.f, Brightness.f, Temp.f
Protected *Value.Complex = @Iteration(x, y)
With *Value
Temp = \Re*\Re - \Im*\Im
\Im = 2*\Re*\Im + Add\Im
\Re = Temp + Add\Re
Length = Sqr(\Re*\Re+\Im*\Im)
Angle = ComplexAngle(*Value)*180/#PI
EndWith
If Length > 1e3 Or Length < 0
Darkness = 0 : Brightness = 1
ElseIf Length < 1
Darkness = 1 : Brightness = Sqr(Length)
Else
Darkness = 1/Length : Brightness = 1
EndIf
ProcedureReturn HSV(Angle, Brightness, Darkness)
EndProcedure
CreateImage(#Image, #Size*3, #Size*2)
OpenWindow(#Window, 0, 0, ImageWidth(#Image), ImageHeight(#Image)+20, "Image", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
ImageGadget(#Gadget, 0, 20, ImageWidth(#Image), ImageHeight(#Image), ImageID(#Image))
ButtonGadget(#Button, 0, 0, #Size*3, 20, "Nächte Iteration")
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #Button
StartDrawing(ImageOutput(#Image))
DrawingMode(#PB_2DDrawing_Transparent|#PB_2DDrawing_CustomFilter)
CustomFilterCallback(@CustomCallback())
Box(0, 0, #Size*3, #Size*2)
StopDrawing()
SetGadgetState(#Gadget, ImageID(#Image))
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver