CODINGCLASSEURS WEKA ★ Comment exploiter toutes les ressources et augmenter les performances de votre AMSTRAD CPC ★

5/10.2.2 - Miroir par rapport à un axe verticalCoding Classeurs Weka
5/10.2.2 Miroir par rapport à un axe vertical

Supposons 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 dessin

Lignes 1130 à 1150 :

  • Chargement des sous-programmes assembleur.

Lignes 1170 à 1310 :

  • Initialisation du programme.

Lignes 1320 :

  • Chargement d'une image.

Lignes 1330 :

  • Sauvegarde pour permettre l'option « R » par la suite.

Lignes 1390 à 1500 :

  • Gestion du curseur.

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.

Page précédente : 5/10.2.1 - Reproduction de blocs graphiques
Je participe au site:

» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop
Page créée en 182 millisecondes et consultée 879 fois

L'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.