H-tree fractal

 


Просматривал программы на всеми забытом сайте. Меня заинтересовал один фрактал и я переписал код на PureBasic. 

Procedure DrawH(x, y, raz)
  LineXY( x - raz, y - raz, x - raz, y + raz);
  LineXY (x - raz, y, x + raz, y)            ;
  LineXY( x + raz, y - raz, x + raz, y + raz);
EndProcedure
Procedure DrawHF(x1, y1, razmer, min)
  x11 = x1 + razmer
  y11 = y1 + razmer
  x01 = x1 - razmer
  y01 = y1 + razmer
  x00 = x1 - razmer
  y00 = y1 - razmer
  x10 = x1 + razmer
  y10 = y1 - razmer
  DrawH(x1, y1, razmer)        
  razmer = razmer/2
  If razmer >= min          
    DrawHF(x11, y11, razmer, min)
    DrawHF(x01, y01, razmer, min)
    DrawHF(x10, y10, razmer, min)
    DrawHF(x00, y00, razmer, min)
  EndIf
EndProcedure
If OpenWindow(0, 0, 0, 320, 320, "H-tree", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CanvasGadget(0, 0, 0, 320, 320)
  If StartDrawing(CanvasOutput(0))
    Box(0,0,320,320,0)
    DrawHF(160, 160, 80, 5)
    StopDrawing()
  EndIf   
  Repeat
    Event = WaitWindowEvent()
  Until Event = #PB_Event_CloseWindow
EndIf

Набрал программу на Picocalc - не работает. Долго проверял исходник на наличие опечаток - бесполезно. Убрал  razmer = razmer/2 и заменил razmer  на razmer/2 - заработало.

Интересно, что во многих программах использовалось это самое выражение. Беглый поиск привел к разным версиям программы. Надо будет попробовать такие варианты.

Комментарии