Donut 3D - Amstrad CPC

Programme Locomotive BASIC généré par IA

Donut 3D - Amstrad CPC

Code source BASIC

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