REM SET MODE TO 8 USING VDU VDU 22,8 REM SET LINE THICKNESS TO 3 VDU 23,23,3| OFF GCOL 1 PROC_ellipsering(200,100,800,800,150,100,200,200,200,2) PROC_ellipsering(10,20,1100,400,200,100,200,50,200,2) PROC_ellipsering(50,200,150,400,200,100,50,145,50,2) PROC_sphere(200,700,50,100,200,100,3) PROC_sphere(800,500,250,200,150,200,1) PROC_sphere(600,500,300,150,150,200,1) PROC_sphere(500,300,300,200,200,200,1) (mou) MOUSE x,y,b IF b=4 THEN PROC_sphere(x,y,50,100,200,100,3) GOTO (mou) END DEF PROC_ellipsering(CENTERH,CENTERV,H,V,SIZE,THICKNESS,X,C,A,DI) IF SIZE > THICKNESS THEN SIZE = THICKNESS OC=THICKNESS/2 OUTCENTERH=CENTERH+OC OUTCENTERV=CENTERV+OC R=0 SWITCH=0 DEPTHCOUNT=SIZE/2 FOR Y=1 TO DEPTHCOUNT COLOUR 1,X,C,A ELLIPSE H,V,OUTCENTERH-R,OUTCENTERV-R ELLIPSE H,V,OUTCENTERH+R,OUTCENTERV+R R=R+1 (leap) X=X-DI C=C-DI A=A-DI IF X<2 THEN X=2 IF C<2 THEN C=2 IF A<2 THEN A=2 NEXT Y ENDPROC ENDPROC DEF PROC_sphere(H,V,SIZE,R,G,B,DI) r%=R g%=G b%=B size%=SIZE dimmer%=DI FOR x%=0 TO size% c%=50 r%=r%-dimmer% g%=g%-dimmer% b%=b%-dimmer% IF r% <2 THEN r%=2 IF g% <2 THEN g%=2 IF b%<2 THEN b%=2 IF r%<50 AND g%<50 AND b%<50 THEN GOTO (jump) COLOUR 1,r%,g%,b% CIRCLE H,V,x% (jump) NEXT x% ENDPROC
MODE 21 VDU 23,23,3| PROCSphere(800,600,500,50,20,20) PROCSphere(200,200,100,50,100,20) PROCSphere2(900,500,200,50,20,250) PROCSphere2(1200,100,50,150,20,50) END : DEFPROCSphere(px%,py%,rdius%,r%,g%,b%) LOCAL x%,dw,dr GCOL 1 FOR x%=0 TO rdius%-1 dr=(x%/rdius%)^2 :REM Calculate what fraction of the shift to white has passed REM The squaring means you spend more time near the base colour, which I think looks better REM Properly, you should probably use some sort of COS function... COLOUR 1,r%+(255-r%)*dr,g%+(255-g%)*dr,b%+(255-b%)*dr CIRCLE px%,py%,rdius%-x% NEXT x% ENDPROC : DEFPROCSphere2(px%,py%,rdius%,r%,g%,b%) LOCAL x%,dw,dr GCOL 1 FOR x%=0 TO rdius%-1 dr=COS((PI/2)*((x%/rdius%))) :REM Alternative version using COS COLOUR 1,255-(255-r%)*dr,255-(255-g%)*dr,255-(255-b%)*dr CIRCLE px%,py%,rdius%-x% NEXT x% ENDPROC