Programme Locomotive BASIC généré par IA
10 tstart=TIME
20 MODE 1
30 INK 0,0:INK 1,6:INK 2,2:PAPER 0:PEN 1:CLS
40 REM DEFINT A-Z
50 ZOOM=100 ' Ajuste cette valeur pour changer la taille
60 CX=320 ' Centre en X du donuts
70 CY=200 ' Centre en Y du donuts
80 R1=30 ' Rayon intérieur
90 R2=60 ' Rayon extérieur
100 N=36 ' Nombre de points pour dessiner le donuts
110 ANGLEX=30 ' Angle de rotation autour de l'axe X
120 ANGLEY=30 ' Angle de rotation autour de l'axe Y
130 ANGLEZ=30 ' Angle de rotation autour de l'axe Z
140 RAX=ANGLEX*PI/180 ' Convertir l'angle en RAs
150 RAY=ANGLEY*PI/180 ' Convertir l'angle en RAs
160 RAZ=ANGLEZ*PI/180 ' Convertir l'angle en RAs
170 DIM POINTS(N*N-1,2) ' Tableau pour stocker les coordonnées des points
180 ' Générer les points du donuts
190 FOR I=0 TO N-1
200 THETA=I*2*PI/N
210 FOR J=0 TO N-1
220 PHI=J*2*PI/N
230 X=(R2+R1*COS(PHI))*COS(THETA)
240 Y=(R2+R1*COS(PHI))*SIN(THETA)
250 Z=R1*SIN(PHI)
260 POINTS(I*N+J,0)=X
270 POINTS(I*N+J,1)=Y
280 POINTS(I*N+J,2)=Z
290 LOCATE 1,1:PRINT ROUND((TIME-tstart)/300);"sec"
300 NEXT J
310 NEXT I
320 ' Appliquer les rotations sur les points
330 FOR I=0 TO N*N-1
340 ' Rotation autour de l'axe X
350 Y=POINTS(I,1)*COS(RAX)-POINTS(I,2)*SIN(RAX)
360 Z=POINTS(I,1)*SIN(RAX)+POINTS(I,2)*COS(RAX)
370 POINTS(I,1)=Y
380 POINTS(I,2)=Z
390 ' Rotation autour de l'axe Y
400 X=POINTS(I,0)*COS(RAY)+POINTS(I,2)*SIN(RAY)
410 Z=-POINTS(I,0)*SIN(RAY)+POINTS(I,2)*COS(RAY)
420 POINTS(I,0)=X
430 POINTS(I,2)=Z
440 ' Rotation autour de l'axe Z
450 X=POINTS(I,0)*COS(RAZ)-POINTS(I,1)*SIN(RAZ)
460 Y=POINTS(I,0)*SIN(RAZ)+POINTS(I,1)*COS(RAZ)
470 POINTS(I,0)=X
480 POINTS(I,1)=Y
490 ' Translater et appliquer le zoom
500 POINTS(I,0)=CX+POINTS(I,0)*ZOOM/50
510 POINTS(I,1)=CY+POINTS(I,1)*ZOOM/50
520 LOCATE 1,1:PRINT ROUND((TIME-tstart)/300);"sec"
530 NEXT I
540 ' Dessiner le donuts
550 FOR I=0 TO N-1
560 FOR J=0 TO N-1
570 ' Relier les points horizontaux
580 K=(I*N+(J+1) MOD N)
590 MOVE POINTS(I*N+J,0),POINTS(I*N+J,1)
600 DRAW POINTS(K,0),POINTS(K,1)
610 ' Relier les points verticaux
620 K=((I+1) MOD N)*N+J
630 MOVE POINTS(I*N+J,0),POINTS(I*N+J,1)
640 DRAW POINTS(K,0),POINTS(K,1)
650 LOCATE 1,1:PRINT ROUND((TIME-tstart)/300);"sec"
660 NEXT J
670 NEXT I