*Important Note:** All variables in degrees must be converted to RADians as BASIC can only interpret radians.*

Simply adding additional geometric shapes to the basic shapes discussed previously can make the graphic more dynamic and interesting. One of the simplest to enhance is the circle.

The circle is the basis for an elementary graphic. Adding additional circles with their centres equi-spaced around the circumference of a central circle gives a simple but effective graphic and uses BASICs trigonometrical functions, sine and cosine to find the centres of the outside circles (figure 6).

Fig 6: Multi-circles

Start with a simple circle:

MODE 1920,1080,32

ORIGIN 1920,1080

r = 500

CIRCLE 0,0,r

Now add the other 6 circles:

MODE 1920,1080,32

ORIGIN 1920,1080

r = 500

CIRCLE 0,0,r

**FOR circ = 0 TO 300 STEP 60**

** CIRCLE r*COS RAD(circ),r*SIN RAD(circ),r**

**NEXT**

A simple ellipse pattern can be created to give a pseudo torus. It starts with a basic ellipse drawn in the horizontal position (figure 7).

Fig 7 Simple ellipse

Simply adding a FOR-NEXT loop to change the angle from 0 to PI (180°) and a STEP size of 0.15 gives the picture shown (figure 9). The STEP variable is critical to ensure the distance between each ellipse is the same. It gives 20 rotated ellipses + the base ellipse = 21 in total. A STEP size of 0.14 or 0.16 draws an incorrect gap size for the last ellipse.

Fig 9 Pseudo torus

REM Create a pseudo torus

MODE 1920,1080,32 : OFF

X=1000 : Y=500

FOR angle=0 TO PI STEP 0.15

ELLIPSE 1920,1080,X,Y,angle

NEXT

Overlapping ellipses as shown in figure 10 can be created with the routine below

Fig 10 Ellipses at 90° (only 6 pairs of ellipses are shown)

MODE 1920,1080,32 : OFF

ORIGIN 1920,1080

GCOL ON 255,255,200 : CLG

X=100 : Y=50

REPEAT

ELLIPSE 0,0,X,Y, PI/2 : REM Vertical ellipse

GCOL OF RND(255),RND(255),RND(255)

ELLIPSE 0,0,X,Y : REM Horizontal ellipse

X+=50 : Y+=50

UNTIL X=1050

There are several ways of creating polygons for example to draw a hexagon requires a minimum of code as shown:

MODE 1920,1080,32 : OFF

X = 1920 : Y = 1080 : R = 1000

MOVE X + R, Y : REM Move to first point

FOR theta = 0 TO 360 STEP 60

DRAW X+R*COS(RAD(theta)),Y+R*SIN(RAD(theta))

NEXT theta

Note: Program uses degrees in the FOR-NEXT loop but converted to RADians in the DRAW command.

Just change the STEP size to alter the number of sides (eg. STEP 45 will create an octagon).

An extension to the hexagon program draws many polygons in a concentric pattern, starting with a square and finishing with a dodecagon:

MODE 1920,1080,32 : OFF

X = 1920 : Y = 1080

FOR sides = 4 TO 12

radius = 80*sides

PROCPOLY

NEXT sides

END

DEF PROCPOLY

MOVE X+radius,Y

D_theta = 2 * PI/sides

theta=0

FOR N = 1 TO sides

theta=theta+D_theta

DRAW X+radius*COS(theta),Y+radius*SIN(theta)

NEXT N

ENDPROC

MODE 1920,1080,32

REM R=radius and NR the # of radials

PROCradials(1920,1080,1000,80)

END

DEF PROCradials(X,Y,R,NR)

theta=2*PI/NR

DX=R:DY=0

FOR N=1 TO NR

MOVE X,Y

DRAW X+DX,Y+DY

X1=DX*COS(theta)-DY*SIN(theta)

DY=DX*SIN(theta)+DY*COS(theta)

DX=X1

NEXT N

ENDPROC