Red Cushion

 

Меня снова потянуло на подвиги, полез на BBC Microbot, стал смотреть на программы. Один пример удивил - указан автор, и картинка нарисована кодом. Получилось не сразу, но потом разобрался. Код еще не оптимизирован:

Dim l.f(512)
;1280x1024
For x=0 To 511
  t.f=x/511
  l(x)=ACos(t*2-1)/#PI
Next x
Dim co(1)
co(0)=255
co(1)=$FFFFFF
If OpenWindow(0, 0, 0, 512, 512, "Akiyoshi Kitaoka illusion - 'Red Cushion'", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    CanvasGadget(0, 0, 0, 512, 512)
    If StartDrawing(CanvasOutput(0))
      For x=0 To 511
        For y=0 To 255
          u.f=l(x)*15
v.f=l(y+y)*15
P=Int(u)
Q=Int(v)
pp.f=u-P
qq.f=v-Q
; c=0
; If (P+Q)&1=0
;   c=1-c
; EndIf
c=(P+Q)&1
sx.f=pp-0.5
sy.f=qq-0.5
cx.f=Abs(Abs(sx)-0.3)
cy.f=Abs(Abs(sy)-0.3)
If x<256
  sx=-sx
EndIf
If y<128
  sy=-sy
EndIf
;If (Sign(sx)<>Sign(sy)) Or ((P=7) And (Q=7))
If Sign(sx)<>Sign(sy) Or (P=7 And Q=7)
  If (cx<0.14) And (cy<0.14)
    c=1-c
EndIf
EndIf
;Box(x*2,y*4,2,4,co(c))
Box(x,y*2,1,2,co(c))
        Next y
        Next x
            StopDrawing()
          EndIf
    Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow
  EndIf


Комментарии