dos_compilers/Digital Research CB-86 v2/CIRCOM.BAS

82 lines
2.5 KiB
QBasic
Raw Normal View History

2024-06-30 20:56:20 +02:00
REM These are the circle drawing functions.
REM
REM Use %INCLUDE CIRCOM.BAS to include the functions
REM in your program.
REM
REM
REM CALL BEG.CIR to initialize the circle arrays
REM CALL PLOT.CIR to draw a circle without fill
REM CALL FILL.CIR to draw a circle with fill
REM
REM The circle is centered at .5,.5 with a radius
REM of .5 in a coordinate system ranging from 0 to 1
REM on the X and Y axes.
REM
REM Initialize the circle drawing arrays X.ARRAY and
REM Y.ARRAY by using CALL BEG.CIR in the beginning
REM of your program. This statement only needs to
REM be executed once. There is a long delay while
REM this CALL is completed; you may want to put
REM a message in your program to let the user know
REM that the machine is computing.
REM
REM You can position the circle as you wish using
REM the SET VIEWPORT and SET WINDOW statements prior
REM to calling the drawing functions.
REM
REM The aspect ratio of the device must be adjusted
REM in order to proportion the circle. You can use
REM the following statements to accomplish this:
REM
REM ASK DEVICE X.AXIS,Y.AXIS
REM SET WINDOW 0,X.AXIS/Y.AXIS,0,1
REM
REM These statements scale the window so that the X
REM and Y axes use the same unit scaling regardless
REM of the aspect ratio of the device. The circle
REM is drawn with a shift to the left of the viewport
REM because of the increased scaling of the X axis.
REM You can also use the BOUNDS statement to square
REM the device or the VIEWPORT statement to rescale
REM the viewport.
REM
REM The functions make use of the variables L.CIR
REM X.ARRAY, Y.ARRAY, and I.ANGLE. X.ARRAY is an
REM array of the X coordinates of the points around
REM the circle. Y.ARRAY is the corresponding Y
REM coordinates. L.CIR contains a count of the
REM number of coordinate pairs. I.ANGLE is only
REM used by the FOR loop in BEG.CIR.
REM
DEF BEG.CIR
DIM X.ARRAY(64)
DIM Y.ARRAY(64)
L.CIR=0
REM THIS FOR LOOP STEPS THROUGH 0 TO 360 DEGREES
REM USING RADIANS. THERE ARE 2PI RADIANS IN 360 DEGREES.
FOR I.ANGLE = 0 TO 6.28 STEP .1
X.ARRAY(L.CIR) = .5 + (.5 * COS(I.ANGLE))
Y.ARRAY(L.CIR) = .5 + (.5 * SIN(I.ANGLE))
L.CIR = L.CIR + 1
NEXT I.ANGLE
REM THE CIRCLE MUST BE CLOSED FOR MAT PLOT
X.ARRAY(L.CIR) = X.ARRAY(0)
Y.ARRAY(L.CIR) = Y.ARRAY(0)
RETURN
FEND
DEF PLOT.CIR
MAT PLOT L.CIR: X.ARRAY,Y.ARRAY
RETURN
FEND
DEF FILL.CIR
MAT FILL L.CIR-1: X.ARRAY,Y.ARRAY
RETURN
FEND