Graphiques avec des cercles
GW-Basic, utilisé par PC-Basic
Programme avec Graphique et Texte
Un cercle est défini comme l'ensemble de tous les points d'un plan situés à une distance fixe, appelée rayon, d'un point unique, appelé centre. Nous pouvons utiliser la formule de distance (elle-même simplement une autre façon d'exprimer le théorème de Pythagore sur le plan de coordonnées) pour trouver l'équation d'un cercle.
a² +b² = c² (théorème de Pythagore)
(formule de distance)
La mise au carré des deux côtés de la formule de distance nous donne
Nous pourrions considérer d comme le rayon r du cercle, puisque le rayon est la distance à tous les points (x, y) de l'ensemble qui se trouvent avoir la même distance au centre du cercle.
Algébriquement, alors, l'équation d'un cercle est
où le rayon est r et les coordonnées du centre sont données par a et b.
Heureusement, plutôt que d'avoir à tracer des points à l'aide de l'équation, GW-BASIC propose une instruction appelée CIRCLE qui permet une grande variété d'affichages de cercles. Les programmes qui suivent vous offrent quelques-uns des plus grands succès de CIRCLE.
CIRCLE1.BAS agrandit et contracte simplement un cercle à l'écran. Notez que l'instruction STEP a besoin d'un nombre négatif pour réduire le cercle.
C'est avec CIRCLE2.BAS que les choses deviennent plus intéressantes. Un cercle est tracé, morceau par morceau. Examinez attentivement la syntaxe de l'instruction CIRCLE ; remarquez les doubles virgules spécifiant la partie en constante évolution du cercle à afficher.
CIRCLE3.BAS peut vous mettre en transe si vous regardez trop longtemps. Encore une fois, les cercles grandissent et rétrécissent, à l'infini.
Un élément aléatoire est introduit dans la procédure dans CIRCOL.BAS. Des cercles de couleurs aléatoires en constante expansion volent vers vous sur l'écran.
TUNNEL.BAS permet à l'utilisateur un petit degré de flexibilité avec la création de cercles à l'écran, tandis que CIRMAKER.BAS permet un certain nombre d'options de personnalisation des cercles.
Bien qu'il ne s'agisse pas tout à fait d'une balle rebondissante - cela viendra dans à une section ultérieure - BOUNCE. BAS vous présente un cercle rebondissant. La déclaration CLS aide à donner au cercle l'illusion d'un mouvement.
Les programmes CIROV.BAS et COIN.BAS tire parti d'une autre fonctionnalité de l'instruction CIRCLE : étirer des cercles en ellipses avec des excentricités variables.
Une ellipse est similaire à un cercle, sauf qu'au lieu que chaque point de l'ensemble ait une distance fixe du centre, chaque point d'une ellipse a une distance constante de la somme de deux foyers. (Les planètes de notre système solaire ont des orbites elliptiques, l'emplacement du soleil servant de foyer.)
L'équation d'une ellipse, qui, comme l'équation d'un cercle, est dérivée en utilisant la formule de distance, est donnée par:
où la longueur du grand axe de symétrie (l'axe le plus long) est 2a, la longueur du petit axe de symétrie (l'axe le plus court) est 2b et le centre de l'ellipse est à l'origine.
Notez les quatre virgules d'affilée partout où CIRCLE est utilisé dans CIROV.BAS. COIN. BAS affiche une "pièce" rotative à l'écran.
Enfin, COIN2.BAS est un exercice de bêtise abjecte. Au lieu d'une pièce de monnaie en rotation, une astuce visuelle présente une bouche, s'ouvrant et se fermant, entourée d'un visage créé à l'aide de l'instruction DRAW.
Les programmes de cette section vous donnent un avant-goût des nombreuses options permises par GW-BASIC lors de l'affichage des cercles, et ainsi (espérons-le) aiguiseront votre appétit pour construire vos propres explorations de cercles.
5 REM CIRCLE1.BAS
10 KEY
OFF:SCREEN 7:COLOR 2,1:CLS
20 FOR I=10 TO 100 STEP 5
30 CIRCLE(126,98),I
40 CLS:NEXT I
50 CLS:FOR I=100 TO 10 STEP -5
60 CIRCLE(126,98),I
70
CLS:NEXT I
80 CLS:GOTO 20
5 REM CIRCLE2.BAS
10 KEY OFF
20 SCREEN 7:CLS
40 COLOR 3,0,8
50 FOR U= 6 TO 0 STEP -.01
60
CIRCLE(126,96),100,,U
67 CLS
70 NEXT U
80 CLS
90 FOR Y=0 TO 6 STEP
.01
100 CIRCLE(126,96),100,,Y
107 CLS
110 NEXT Y
120 GOTO 10
5 REM CIRCLE3.BAS
10 KEY
OFF:SCREEN 7:COLOR 2,1:CLS
20 FOR I= 10 TO 100 STEP 1.5
30
CIRCLE(126,98),I
40 NEXT I
50 CLS:FOR I=100 TO 10 STEP -1.5
60
CIRCLE(126,98),I
70 NEXT I
80 CLS:GOTO 20
1 REM CIRCOL.BAS
5 SCREEN
7:RANDOMIZE TIMER
10 COLOR 1,15:CLS
15 T=INT(1+15*RND(1)):COLOR T
20
FOR M=l TO 100 STEP 2
30 CIRCLE(126,96),M
40 NEXT M
50 GOTO 15
1 REM TUNNEL.BAS
2 KEY
OFF:SCREEN 7:COLOR 15,1:CLS
5 INPUT "STEPS";D
10 SCREEN 7:COLOR
15,15:COLOR 1:CLS
20 FOR U=l TO 250 STEP D
30 Y=INT(1+15*RND(1))
40
COLOR Y,1:CIRCLE(139,96),U
50 NEXT U
60 FOR I=1 TO 19000:NEXT:GOTO 5
0 REM CIRMAKER.BAS
1 KEY
OFF:CLS
2 SCREEN 9:COLOR 8,2
3 PRINT: PRINT'.PRINT: PRINT: PRINT: PRINT:
PRINT: PRINT "The Circle Maker"
5 COLOR 4,2:PRINT:PRINT"*OK*"
6 COLOR
5,2:LINE INPUT" ";A$
7 IF A$="*OK*" THEN GOTO 10
8 BEEP:GOTO 6
10 CLS
20 SCREEN 9:COLOR 1,2:CLS
21 INPUT " X POSITION..";G
23 INPUT " Y POSTION..";F:INPUT
"TO HOW MANY..";X:INPUT " BY HOW MANY STEPS...";C:INPUT "FOREGROUND..";S:INPUT"BACKGROUND..";A:INPUT
"BACKWORDS OR FOREWORDS?";F$:IF F$="FOREWORDS" THEN GOTO 130
24 CLS:COLOR S,A
30 FOR U=X TO 1 STEP -C
40 CIRCLE(G,F),U
50 NEXT U
55 IF INKEY$="" THEN
GOTO 55
60 CLS:PRINT" ANOTHER?"
70 PRINT "YES":PRINT "NO"
80 LINE
INPUT" ";D$
90 IF D$="YES" THEN GOTO 10
95 IF D$="NO" THEN GOTO 105
100
BEEP:GOTO 80
105 CLS:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT "Exiting
Circle Maker...":BEEP
110 FOR I=1 TO 19999:NEXT
120 CLS:STOP
130
CLS:COLOR S,A:FOR U=l TO X STEP C:CIRCLE(6,F),U:NEXT U:FOR Q=l TO
18000:NEXT:GOTO 60
5 REM BOUNCE.BAS
10
CLS:SCREEN 7:COLOR 1,15:CLS
20 FOR H=50 TO 150 STEP 20
30
CIRCLE(126,H-1),50
35 COLOR 1,1:CLS:COLOR 15
40 NEXT H
50 FOR J=150 TO
50 STEP -13
60 CIRCLE(126,J-1),50
70 COLOR 1,1:CLS:COLOR 15
80 NEXT J
90 GOTO 20
5 REM CIROV.BAS
10 SCREEN
7:COLOR 1,15:CLS
20 FOR M=.0001 TO .9 STEP .01
21 I=INT(1+15*RND(1))
22
COLOR I
30 CIRCLE (126,96),50,,,,M
40 NEXT M
50 FOR V= 1 TO 10000:NEXT
V:GOTO 10
5 REM COIN.BAS
10 KEY
OFF:SCREEN 7
20 COLOR 1,15:CLS
30 FOR C=.0001 TO .8 STEP .1
40 COLOR
14:CIRCLE(126,96),30,,,,C
45 FOR TY=1 TO 500:NEXT TY
50 COLOR
1:CIRCLE(126,96),30,,,,C
60 NEXT C
70 FOR X=.8 TO .0001 STEP -.1
80
COLOR 14:CIRCLE(126,96),30,,,X
85 FOR TY=1 TO 500:NEXT TY
90 COLOR
1:CIRCLE(126,96),30,,,,X
100 NEXT X
110 GOTO 30
5 REM COIN2.BAS
10 KEY
OFF:SCREEN 7
20 COLOR 1,14:CLS
21 PSET(70,200):DRAW"M71,154 M51,149
M40,132 M40,46 M48,39 M146,38 M152,44 M152,128 M140,146 M118,154 M118,200"
22
PSET(124,52):DRAW"M129,50 M134,49 M140,51 M141,53 M137,56 M31,57 M126,56 M124,52
BM53,53 M58,51 M63,50 M66,51 M68,54 M64,56 M55,56 M53,53 BM95,52"
23
DRAW"M89,63 M86,62 M82,65 M86,69 M91,67 M94,71 M98,67 M102,70 M105,69 M105,65
M1101,63"
24 PAINT(62,53),15,14:PAINT(153,53),15,14
25
PSET(62,53),4:PSET(153,53),4
27 PAINT(100,1),1,14
30 FOR C=.0001 TO .5
STEP .05
40 COLOR 14:CIRCLE(96,965,30,,,,C
50 COLOR
6:CIRCLE(96,96),30,,,,C
60 NEXT C
70 FOR X=.5 TO .0001 STEP -.05
80
COLOR 14:CIRCLE(96,96),30,,,,X
90 COLOR 6:CIRCLE(96,96),30,,,,X
100 NEXT X
110 GOTO 30