7

Plates


In this program, a slightly different version of PROCPOLY fills in the polygon in a chosen colour before joining each point to every other point. As before, the radius of the polygon is the variable R, but the program calling the procedure gradually reduces R in line 120, thus smaller and smaller polygons are superimposed upon each other.
   The number of sides is variable from 1 to 30 and of course the colours are randomly chosen for each polygon. A point of particular interest is the GCOL command of line 230:

   GCOLRND(5)-1,RND(4)-1

A perusal of this command in the User Guide will show that the result is that the chords drawn in line 260 can be simply drawn, ANDed, ORed or inverted. The effect can be extremely difficult to describe, but is caused by a line being drawn and then another drawn crossing it. In many circumstances, where the two lines cross, both lines are wiped out. Since a multiple-sided polygon will have many such lines crossing each other, the effect can be quite extraordinary, rather like the tightly crinkled petals of a carnation, and quite beautiful in close-up, although some of this effect is lost if you are using a domestic television instead of a colour monitor.
   Overall, then, the program simply draws superimposed polygons with or without criss-crossing lines, the polygons getting smaller and smaller, so the total effect is exactly like an expensive dinner plate with an intricate design. As is usual with computer-generated graphics, some colour combinations are quite stunning.

Variables

X(0) to X(30)The X,Y co-ordinates of the points of
Y(0) to Y(30)the current polygon
RPolygon radius
SNumber of sides
CColour to be blocked in
AAngle to be turned
LCount of chords


   10 REM - Plates
   20 DIM X(30),Y(30)
   30 MODE1
   40 VDU29,650;512;
   50 REPEAT
   60 R=550
   70 S=RND(18)+2
   80 MOVE R,0
   90 MOVE 10,10
  100 C=RND(4)
  110 PROCPOLY(R,S,C)
  120 R=R-RND(100)
  130 IF R>50 GOTO 70
  140 UNTIL 0
  150  
  160 DEFPROCPOLY(R,S,C)
  170 GCOL0,C:MOVE 0,0
  180 FOR SIDE=0 TO S
  190 MOVE 0,0:A=SIDE*2*PI/S
  200 X(SIDE)=R*COSA:Y(SIDE)=R*SINA
  210 PLOT85,R*COSA,R*SINA
  220 NEXT SIDE
  230 MOVE 0,0:PLOT85,R,0:GCOLRND(5)-1,RND(4)-1
  240 FOR SIDE=1 TO S
  250 FOR L=SIDE TO S
  260 MOVE X(SIDE),Y(SIDE):DRAW X(L),Y(L):NEXT L
  270 NEXT SIDE:VDU19,RND(4)-1,RND(8)-1,0,0,0:G=INKEY(250)
  280 ENDPROC