Hier mal eine hübsche kleine Grafikspielerei, die auf Anregung entstanden ist. Es geht um Quadrate, die übereinandergelegt und gegeneinander verdreht werden. Dabei weicht jeder Layer um eine bestimmte Gradzahl vom vorhergehenden Quadratlayer ab, oder wie hier, ändert sich dieser Winkel noch in Abhängigkeit von "irgendwas" (hier eine weitere Sinuskurve), was den Effekt noch netter macht.
Hintergrund des Ganzen sind sogenannte "Verfolgerprobleme" bzw. "Verfolgungskurven" oder in einfacher Form "Hundekurven" und auf schlau: "Radiodrome (WikiP DE)" .
Lauffähig auf BBC Basic.
Auf zu schnellen Geräten (z.B. RPi) muß wohl noch eine kleine Warteschleife vor das CLG Kommando.
Code
REM BBC BASIC Code , rotating squares - filled with fancy colours
REM uses triangles to fill the squares, allows overlapping
ON ERROR REPORT : PRINT " ERROR IN ";ERL : END
DIM STB(720) : REM STB sinustable
R=0
FOR I=0 TO 719 : STB(I)=SIN(R) : R=R+(4*PI /720) : NEXT I
MODE 1280,1024,16
MODE 1280,1024,8
SCREENBANK%=2
ORIGIN 1024,1024
WHILE R<>-1
FOR R=0 TO 360 STEP 3
REM Double-Buffering
WAIT
SYS "OS_Byte",113,SCREENBANK%
SCREENBANK% = SCREENBANK% MOD 2 +1
SYS "OS_Byte",112,SCREENBANK%
CLG
REM Startwerte, rücken jede Runde (R) um 3 Grad weiter vor
ANGLESIN=R
ANGLECOS=R+90
FOR F=900 TO 50 STEP -85
GCOL ( F MOD 32 )
REM Eckpunkte des Quadrats berechnen, auf einem Kreis liegend
X0=STB(ANGLESIN)*F : Y0=STB(ANGLECOS)*F
X1=STB(ANGLESIN+90)*F : Y1=STB(ANGLECOS+90)*F
X2=STB(ANGLESIN+180)*F : Y2=STB(ANGLECOS+180)*F
X3=STB(ANGLESIN+270)*F : Y3=STB(ANGLECOS+270)*F
REM zwei Dreiecke zeichnen, die zusammen ein Quadrat ergeben
MOVE X0,Y0 : MOVE X2,Y2 : SYS "OS_Plot",85,X1,Y1
MOVE X0,Y0 : MOVE X2,Y2 : SYS "OS_Plot",85,X3,Y3
REM Position in der Sinustabelle auf neuen Wert setzen
REM der Cosinus liegt einfach immer bei 90 Grad weiter vorn
ANGLESIN=ANGLESIN+( STB(ANGLESIN)*14 )
ANGLECOS=ANGLESIN+90
NEXT F
NEXT R
ENDWHILE
END
Alles anzeigen