5/10.2.2 Miroir par rapport à un axe verticalSupposons qu'un dessin soit inscrit dans un rectangle. Quelle démarche utiliser pour reproduire le contenu du rectangle réfléchi dans un miroir vertical ? Pour chaque ligne élémentaire haute d'un pixel , il suffit de prendre les pixels successifs et de les inverser (le plus à gauche va à l'extrême droite et le plus à droite va à l'extrême gauche). Pour simplifier l'approche du problème, nous vous présentons ici un programme de symétrisation écrit en BASIC. Le listing du programme est le suivant :
1000 REM Symetrie d'un objet sur l'écran %Oy 1010 REM ================================================== 1020 REM 1) Déterminer le coin INF GAUCHE de l'objet a déplacer 1030 REM 2) Déterminer le coin SUP DROIT de l'objet a déplacer 1040 REM 3) L'objet est encadre 1050 REM 4) Repondre "0" si l'encadrement e»t correct , "N" sinon 1060 REM 5) Déterminer le coin INFERIEUR GAUCHE de la nouvelle position 1070 REM 6) L'objet symetrique %0y apparait a sa nouvelle position 1080 REM ================================================== 1090 INK 0,0 s BORDER 0:INK 1,10:INK 3,10,6:PEN 1:MODE 1:C=1 ' Initialisation 1100 ' 1110 'Prog. ASM Sauvegarde et affichage ecran 1120 ' 1130 FOR I=0 TO &17:READ A:P0KE &9000+I,A :NEXT 1140 DATA &21,0,&C0,&11,0,&40,1,&FF,&3F,&ED,&B0, &C9 1150 DATA &21,0,&40,&11,0,&C0,1,&FF,&3F,&ED,&B0,&C9 1160 ' 1170 PRINT"SYMETRIE DE BLOCS GRAPHIQUES":PRINT:PRINT 1180 LOCATE 1,6:INPUT"Affichage monochrome (O/N)";R$:R$=UPPER$(R*) 1190 IF R $ < > " 0 " AND R$< >"N" THEN 1180 1200 IF R $ -"0" THEN MBC0UL=1 ELSE NBCOUL=3 1210 PRINT 1220 FOR I=0 TO NBCOUL 1230 PRINT"INK";I;":(0 A 26) ";: INPUT A : INK I, A 1240 NEXT I 1250 PRINT:PRINT 1260 INPUT "Nom de l'écran a charger ";N$ 1270 INPUT"Nom de l'écran a sauver ";N2$ 1280 PRINT:PRINT"Une fois toutes les modifications faites, appuyez sur 'S' pour obtenir une sauvegarde de l'écran sur K7 ou disquette " 1290 PRINT"Appuyez sur 'R' pour retourner a l'ecran precedent et sur une autre t ouche pour continuer la symétrisation." 1300 PRINT :PFN 3: PRINT" Appuyez sur une touche" 1310 a$= INKEY$ : IF a$ = "" THEN 1310 1320 LOAD N$,&C000 1330 CALL &9000 'Sauvegarde écran charge 1340 B=TEST(X,Y) 'Memo. du pt ou se trouve le curseur 1350 PLOT X,Y,3 1360 ' 1370 'Boucle principale 1380 ' 1390 A$=INKEY$:IF A$="" THEN 1390 'Attente action 1400 A=ASC(A$) 1410 IF A=55 THEN PLOT X,Y,B:Y=Y+2:X = X-2: GOTO 1340 'En haut a gauche 1420 IF A=57 THEN PLOT X , Y, B : Y=Y+2 : X=X+2 : GOTO 1340 ' En haut a droite 1430 IF A=49 THEN PLOT X,Y,B:Y=Y-2:X = X-2: GOTO 1340 'En bas a gauche 1440 IF A=51 THEN PLOT X,Y,B:Y=Y-2:X = X+2: GOTO 1340 'En bas a droite 1450 IF A=56 THEN PLOT X,Y,B:Y=Y+2: GOTO 1340 'Vers le haut 1460 IF A=50 THEN PLOT X,Y,B:Y=Y-2: GOTO 1340 'Vers le bas 1470 IF A=52 THEN PLOT X,Y,B:X = X-2: GOTO 1340 'Vers la gauche 1480 IF A=54 THEN PLOT X,Y,B:X = X+2: GOTO 1340 'Vers la droite 1490 IF A=13 THEN 1510 'Appui sur ENTER 1500 GOTO 1350 1510 REM Appui sur ENTER 1520 ON C GOTO 1530,1550,1640 1530 ' Mémo coin supérieur gauche 1540 P1 = X:P2=Y:C=2: PLOT X,Y,3:GOTO 1340 1550 'Mémo coin inférieur droit et trace rectangle 1560 P3=X:P4=Y 1570 PLOT P1,P2:DRAW X,P2:DRAW X,Y:DRAW PI,Y:DRAW P1,P2 1580 IF X>P1 THEN SX=X ELSE SX = P1 'SX=SUP1590 IF Y>P2 THEN SY=Y ELSE SY-P2 'SY=SUP(Y,P2) 1600 LOCATE ABS(SX/15+2),ABS(26-SY/15) : INPUT "OK (O/N) " ;R$:R$=UPPER$(R$) 1610 IF R$< > " 0" AND R$<>"N" THEN 1600 1620 IF R$="N" THEN CALL &900C:C=1:X=0:Y=0: GOTO 1390 1630 C=3:GOTO 1390 1640 ' Symetrie %Oy 1650 CALL &900C 'Effacement cadre 1660 XF-X+P3-P1:C=0 'Initia1isation 1670 FOR I=P2 TO P4 STEP 2 1680 B=0:C=C+2 1690 FOR J=P1 TO P3 STEP 2 1700 B=B+2:A=TEST(J,I): PLOT XF-B,Y+C,A 1710 NEXT J 1720 NEXT I 1730 ' 1740 C=1:X=0:Y=0 'Repositionnement curseur 1750 A$=INKEY$:IF A$="" THEN 1750 1760 A$=UPPER$(A$) 'Conversion majuscule 1770 IF A$="R" THEN CALL &900C:G0T0 1340 'Retour a l'ecran precedent 1780 IF A$="S" THEN SAVE N2$,B,&C000,&3FFF 1790 GOTO 1330 ' Nouvel le intervention sur le dessinLignes 1130 à 1150 : - Chargement des sous-programmes assembleur.
Lignes 1170 à 1310 : - Initialisation du programme.
Lignes 1320 : Lignes 1330 : - Sauvegarde pour permettre l'option « R » par la suite.
Lignes 1390 à 1500 : Lignes 1510 à 1590 : - Mémorisation des positions du curseur suite à un appui sur la touche « ENTER ».
Lignes 1640 à 1720 : - Fonction miroir vertical.
Lignes 1740 à 1790 : - Attente d'une action au clavier (R, S ou autre).
Les sous-programmes ASSEMBLEUR utilisés sont les sous-programmes de mémorisation et de restitution de mémoire d'écran décrits au chap. 10.1 de cette partie.
CPCrulez[Content Management System] v8.7-desktop/c Page créée en 662 millisecondes et consultée 881 foisL'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko. |
|