Меня снова потянуло на подвиги, полез на 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
;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

Комментарии
Отправить комментарий