RosettaCodeData/Task/Draw-a-rotating-cube/FreeBASIC/draw-a-rotating-cube.basic

34 lines
1.0 KiB
Plaintext

#define PI 3.14159265358979323
#define SCALE 50
#define SIZE 320
#define zoff 0.5773502691896257645091487805019574556
#define cylr 1.6329931618554520654648560498039275946
screenres SIZE, SIZE, 4
dim as double theta = 0.0, dtheta = 1.5, x(0 to 5), lasttime, dt = 1./30
dim as double cylphi(0 to 5) = {PI/6, 5*PI/6, 3*PI/2, 11*PI/6, PI/2, 7*PI/6}
sub drawcube( x() as double, colour as uinteger )
for i as uinteger = 0 to 2
line (SIZE/2, SIZE/2-SCALE/zoff) - (x(i), SIZE/2-SCALE*zoff), colour
line (SIZE/2, SIZE/2+SCALE/zoff) - (x(5-i), SIZE/2+SCALE*zoff), colour
line ( x(i), SIZE/2-SCALE*zoff ) - ( x(i mod 3 + 3), SIZE/2+SCALE*zoff ), colour
line ( x(i), SIZE/2-SCALE*zoff ) - ( x((i+1) mod 3 + 3), SIZE/2+SCALE*zoff ), colour
next i
end sub
while inkey=""
lasttime = timer
for i as uinteger = 0 to 5
x(i) = SIZE/2 + SCALE*cylr*cos(cylphi(i)+theta)
next i
drawcube x(), 15
while timer < lasttime + dt
wend
theta += dtheta*(timer-lasttime)
drawcube x(),0
wend
end