Benoit Mandelbrot Died on October 14 @ 85

For everything that's not in any way related to PureBasic. General chat etc...
Mohawk70
Enthusiast
Enthusiast
Posts: 404
Joined: Thu May 11, 2006 1:04 am
Location: Florida, USA

Benoit Mandelbrot Died on October 14 @ 85

Post by Mohawk70 »

HP Z800 Workstation
CPU : Dual Xeon 5690 3.46GHz
RAM : 192GB RAM
GPU : NVIDIA QUADRO P5000 16GB
User avatar
STARGÅTE
Addict
Addict
Posts: 2260
Joined: Thu Jan 10, 2008 1:30 pm
Location: Germany, Glienicke
Contact:

Re: Benoit Mandelbrot Died on October 14 @ 85

Post by STARGÅTE »

In Memory of Benoit Mandelbrot:

Run without debugger!

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


Image
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Lizard - Script language for symbolic calculations and moreTypeface - Sprite-based font include/module
Post Reply