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