Yin/Yang

 


Вспомнилась одна программа, которая рисует символ на компьютере TI99/4A. К сожалению, исходник я так и не нашел в интернетах, но решил попробовать повторить рисунок. Вечером накидал код на PureBasic,  но символ вышел не по центру, и отложил работу до утра. Сегодня воспроизвел рисунок:


If InitSprite() And OpenWindow(0,0,0,640,400,"yinyang",#PB_Window_SystemMenu) And OpenWindowedScreen(WindowID(0),0,0,640,400,0,0,0) 
  StartDrawing(ScreenOutput()) 
  For x=0 To 320
    For y=0 To 200
      cl=$ff0000
      xx=x-160
      yy=y-100
      If Sqr(xx*xx+yy*yy)<100
        If x>160
          cl=0
        Else
          cl=$FFFFFF
        EndIf
        
        yy+50
        If Sqr(xx*xx+yy*yy)<50
          cl=$FFFFff
        EndIf   
        yy-100
        If Sqr(xx*xx+yy*yy)<50
          cl=0
        EndIf
        
        yy+100
        If Sqr(xx*xx+yy*yy)<15
          cl=0
        EndIf
        
        yy-100
        If Sqr(xx*xx+yy*yy)<15
          cl=$FFFFFF
        EndIf
        ;--End radius
      EndIf
      
      Box(x*2,y*2,2,2,cl)
    Next y
  Next x
  StopDrawing() 
  FlipBuffers() 
  Repeat       
  Until WindowEvent()=#PB_Event_CloseWindow 
EndIf

Но мне показалось мало, и я засел за код msdos. После пары пассов вышло 128б. Публиковать буду после Демодуляции 2023.

Дополнение. Теперь анимация

an=0
flg=1
If InitSprite() And OpenWindow(0,0,0,640,480,"3D",#PB_Window_SystemMenu) And OpenWindowedScreen(WindowID(0),0,0,640,480,0,0,0) 
  Repeat
    StartDrawing(ScreenOutput())
    If flg
      Box(0,0,640,480,$ff0000)
      flg=0
    EndIf
    ;DrawingMode(#PB_2DDrawing_Outlined )
    ;Circle(320,100,100,$FFFFFF)
    x0.f=320+50*Cos(an*#PI/180)
    y0.f=100+50*Sin(an*#PI/180)
    DrawingMode(#PB_2DDrawing_Default )
    Circle(Int(x0),Int(y0),50,$FFFFFF)
    Circle(Int(x0),Int(y0),15,0)
    
    x1.f=320+50*Cos((180+an)*#PI/180)
    y1.f=100+50*Sin((180+an)*#PI/180)
    Circle(Int(x1),Int(y1),50,0)
    Circle(Int(x1),Int(y1),15,$FFFFFF)
    
    DrawingMode(#PB_2DDrawing_Outlined )
;    Circle(320,100,100,$FFFFFF)
    an=(an+2)%360
    ;Debug an
    StopDrawing() 
    FlipBuffers() 
    
    ;Repeat 
  Until WindowEvent()=#PB_Event_CloseWindow 
EndIf


Комментарии