MACRO ANIM2 * MACRO-TIROIR CREEE LE 22 JANVIER 2014 * * DANS CETTE MACRO-TIROIR VOUS POURREZ RANGER * TOUTES VOS MACROS AU FUR ET A MESURE QUE VOUS * LES CREEZ * ********** * LISTE DES MACROS UTILITAIRES * * 1) ANIM#ROND Dessine un rond * 2) ANIM#DIST Distance entre deux points * 3) ANIM#MOTIFQ Place, reduit, rotationne une figure * 4) ANIM#ELLIPSE, ANIM#ELLIC, ANIM#ELLIE Dessins d'ellipse * 5) ANIM#LECM Lecture des coordonnees d'un motif * 6) ANIM#GRAFM Graphe d'un motif * 7) ANIM#NORMA Normalisation des vecteurs d'un motif * 8) ANIM#BOUCHE Dessin d'une bouche (en vue animation) * 9) ANIM#PALETTE Definit palette de couleurs (pr LEGO2, SURF2) * 10) ANIM#NUMERISEUR Pour la numerisation d'un motif * 11) ANIM#INTERPTS Interpolation entre les valeurs d'1 vect * 12) ANIM2#LIMOT Trace les lignes d'un motif * 13) ANIM2#MATHIEU * ********** * FABRICATION D'UN FICHIER POSTSCRIPT paw.ps CONTENANT LES GRAPHES FORTRAN/FILE 66 paw.ps * en largeur (``landscape''=paysage) *META 66 -112 * en hauteur (portrait) META 66 -111 * fabrication de encapsulated postscript (p. 286 du manuel) *META 66 -113 * ********** * ON REDONNE AUX PARAMETRES GRAPHIQUES LEURS VALEURS PAR DEFAUT IGSET * SET * OPTION * * *********** * DEFINITION DES PARAMETRES GRAPHIQUES HABITUELLEMENT UTILISES EXEC ANIM2#PARG * ********** * ORDRES D'EXECUTION * *EXEC ANIM2#S1 *EXEC ANIM2#S2 *EXEC ANIM2#S5 *EXEC ANIM2#S8 *EXEC ANIM2#TESTBONAN *EXEC ANIM2#VOEUX *EXEC ANIM2#COULEUR *EXEC ANIM2#TESTCOUL *EXEC ANIM2#PARTICIPATION *EXEC ANIM2#ARIANE EXEC ANIM2#TESTMATHIEU *EXEC ANIM2#MATHIEUVISAGE *EXEC ANIM2#TESTMOTIFP *EXEC ANIM2#ARIANEB *EXEC ANIM2#DIAPORAMA ********** * FERMETURE DU FICHIER POSTSCRIPT CLOSE 66 * RETURN ************************************************************************ MACRO PARG *DEFINIT LES PARAMETRES HABITUELLEMENT UTILISES POUR LES GRAPHIQUES * * LARGEUR (XL) ET HAUTEUR (YL) DE LA PAGE GRAPHIQUE (QUI PEUT * COMPRENDRE UN OU PLUSIEURS SOUS-GRAPHE) * LES NOMBRES XL,YL CORRESPONDENT A DES cm SUR UNE IMPRESSION-PAPIER * EN FORMAT A4 (21cm x 29.7cm) XL=27. XL=19. *YL=27 YL=19. * SIZE [XL] [YL] * * UN SEUL GRAPHE SUR LA PAGE (OPTION PAR DEFAUT) ZONE 1 1 * DEUX GRAPHES COTE A COTE *ZONE 2 1 * DEUX GRAPHES L'UN EN DESSOUS DE L'AUTRE *ZONE 1 2 * TROIS GRAPHES L'UN EN DESSOUS DE L'AUTRE *ZONE 1 3 * QUATRE GRAPHIQUES *ZONE 2 2 * * TITRE GLOBAL TITLE ' ' * * EPAISSEUR TRAIT BOITE SET BWID 2 * EPAISSEUR TRAIT COURBE IGSET LWID 10 * HAUTEUR ET FONTE POUR LES CHIFFRES DES AXES *SET VFON -40 | Police de caracteres Helvetica *SET VFON -60 | Police Helvetica Bold (=gras) SET VFON -20 | Police SET VSIZ 0.50 * * FONTE ET TAILLE POUR LES TITRES DES AXES X ET Y SET LFON -30 | Police Times-Bold-Italic SET ASIZ 0.46 * LONGUEURS TICKMARKS (=GRADUATIONS DES AXES) SET XTIC 0.50 SET YTIC 0.50 * MARGES A DROITE ET A GAUCHE ENTRE CADRE GLOBAL ET AXES X SET XMGR 1.4 SET XMGL 2.7 * ESPACE ENTRE LES AXES ET LES CHIFFRES SET XVAL 0.5 SET YVAL 0.3 * ESPACES ENTRE LES AXES ET LES TITRES DES AXES: YLAB,XLAB SET YLAB 1.4 SET XLAB 2.1 * FONTE ET TAILLE POUR ``TITLE'' SET GFON -20 ; SET GSIZE 0.30 * * NON IMPRESSION (NBOX) OU IMPRESSION (BOX) DU CADRE GLOBAL OPTION NBOX *OPTION BOX * RETURN ******************************************** MACRO S1 * MACRO SIMPLE NO 1 -> DESSIN DE SYMBOLES * TRACE ON WAIT * * DEFINITION ET DESSIN DU REPERE X1=0 ; X2=10 ; Y1=0 ; Y2=10 NULL [X1] [X2] [Y1] [Y2] * * ON PLACE LES SYMBOLES XP=1 ; YP=5 ; KEY [XP] [YP] XP=2 ; YP=5 ; KEY [XP] [YP] XP=3 ; YP=5 ; KEY [XP] [YP] * TRACE OFF * RETURN *********************************************** MACRO S2 * MACRO SIMPLE NO 2 -> DESSIN DE SYMBOLES AVEC BOUCLE * * TRACE ON WAIT * * DEFINITION ET DESSIN DU REPERE X1=0 ; X2=10 ; Y1=0 ; Y2=10 NULL [X1] [X2] [Y1] [Y2] * * ON PLACE LES IM SYMBOLES IM=20 DO I=1,[IM] XP=[I] ; YP=5 ; KEY [XP] [YP] ENDDO * TRACE OFF * RETURN *********************************************** MACRO S3A * MACRO SIMPLE NO 3 -> DESSIN DE SYMBOLES AVEC VECTEURS * * DEFINITION ET DESSIN DU REPERE X1=0 ; X2=10 ; Y1=0 ; Y2=10 NULL [X1] [X2] [Y1] [Y2] * N=3 VE/CR XP([N]) R 1 2 3 VE/CR YP([N]) R 5 5 5 GRAPH [N] XP YP P * RETURN *********************************************** MACRO S3B * MACRO SIMPLE NO 4 -> DESSIN DE SYMBOLES AVEC VECTEURS * * DEFINITION ET DESSIN DU REPERE X1=0 ; X2=10 ; Y1=0 ; Y2=10 NULL [X1] [X2] [Y1] [Y2] * N=3 SIGMA XP=ARRAY([N],1#[N]) SIGMA YP=ARRAY([N],5#5) GRAPH [N] XP YP P * RETURN *********************************************** MACRO S5 * MACRO SIMPLE NO 1 -> DESSIN DE SYMBOLES * * DEFINITION ET DESSIN DU REPERE X1=0 ; X2=10 ; Y1=0 ; Y2=10 NULL [X1] [X2] [Y1] [Y2] AB * * ON PLACE LES SYMBOLES S1=2.5 ; S2=5 IGSET PMCI 3 ; SET KSIZ [S1] XP=1 ; YP=5 ; KEY [XP] [YP] 21 IGSET PMCI 2 ; SET KSIZ [S2] XP=3 ; YP=6 ; KEY [XP] [YP] 20 IGSET PMCI 3 ; SET KSIZ [S1] XP=5 ; YP=5 ; KEY [XP] [YP] 21 * * ECRITURE IGSET TXFP -17 ; IGSET CHHE 1 ; IGSET TXCI 3 ; IGSET TXAL 20 TX=Bonne Annee XP= 3 ; YP=3.0 ; ITX [XP] [YP] [TX] * RETURN ************************************************ MACRO S6 * MACRO SIMPLE NO 6 -> DESSIN DE SYMBOLES AVEC TAILLES ET COULEURS * * FABRICATION D'UN FICHIER POSTSCRIPT paw.ps CONTENANT LES GRAPHES FORTRAN/FILE 66 paw.ps * en hauteur (portrait) META 66 -111 * * DEFINITION ET DESSIN DU REPERE X1=0 ; X2=10 ; Y1=0 ; Y2=10 NULL [X1] [X2] [Y1] [Y2] AB * * ON PLACE LES SYMBOLES S1=2.5 ; S2=5 IGSET PMCI 3 ; SET KSIZ [S1] XP=1 ; YP=5 ; KEY [XP] [YP] 21 IGSET PMCI 2 ; SET KSIZ [S2] XP=3 ; YP=6 ; KEY [XP] [YP] 20 IGSET PMCI 3 ; SET KSIZ [S1] XP=5 ; YP=5 ; KEY [XP] [YP] 21 * * ECRITURE IGSET TXFP -17 ; IGSET CHHE 1 ; IGSET TXCI 4 ; IGSET TXAL 20 TX=Bonne Annee XP= 3 ; YP=3.0 ; ITX [XP] [YP] [TX] * * FERMETURE DU FICHIER POSTSCRIPT CLOSE 66 * RETURN ******************************************************* MACRO S7 * COMMENT FAIRE DE LA ``NEIGE'', C'EST-A-DIRE PLACER * UN GRAND NOMBRE DE POINTS DANS L'ECRAN DE FACON * ``IRREGULIERE'' * * REMISE A ZERO DES CHOIX DE IGSET ET DE SET IGSET * ; SET * * * 1) COMMENT FABRIQUER DES NOMBRES AU HASARD? * REPONSE: ON UTILISE LA FONCTION RDNM * N=10 VE/CR H([N]) R ; SIGMA W=RNDM(H) * * 2) ON FABRIQUE LE VECTEUR DES ABSCISSES SIGMA X=ARRAY([N],0#1) * * 3) ON CREE LE SYSTEME D'AXES X1=0 ; X2=1 ; Y1=0 ; Y2=1 ; NULL [X1] [X2] [Y1] [Y2] * * 4) ON PLACE LES POINTS DANS LE GRAPHIQUE GRAPH [N] X W * * VE/DE * RETURN ******************************************************* MACRO S8 * VERSION ENJOLIVEE DE LA ``NEIGE'' DE LA MACRO S7 * ON CHANGE LA COULEUR DU FOND ET ON MET LES FLOCONS EN BLANC * * REMISE A ZERO DES CHOIX DE IGSET ET DE SET IGSET * ; SET * * * 1) LES NOMBRES AU HASARD N=10 VE/CR H([N]) R ; SIGMA W=RNDM(H) SIGMA X=ARRAY([N],0#1) * * 2) ON DEFINIT LE REPERE D'AXES SANS TRACER LES AXES (OPTION AB) X1=0 ; X2=1 ; Y1=0 ; Y2=1 NULL [X1] [X2] [Y1] [Y2] AB * * 2) ON COLORE LE FOND DU GRAPHIQUE EN BLEU OU EN NOIR * FAIS=FILL AREA INTERIOR STYLE=CHOIX DU STYLE DE REMPLISSAGE * 0->pas de remplissage 1->plein 3->hachures IGSET FAIS 1 * FACI=FILL AREA COLOR INDEX=CHOIX DE LA COULEUR * 1->NOIR 4->BLEU IGSET FACI 4 *BOX 0.5 0.7 0.5 0.7 BOX [X1] [X2] [Y1] [Y2] * * 3) ON PLACE LES POINTS DANS UN GRAPHIQUE * CHOIX DE LA COULEUR DES POINTS PAR PMCI=POLYMARKER COLOR INDEX, 0=BLANC IGSET PMCI 0 ; GRAPH [N] X W * * VE/DE * RETURN ***************************************************** MACRO BONAN * Programme utilitaire * usage: EXEC BONAN [XP] [YP] [T] -> ecrit ``Bonne Annee'' en (XP,YP) * XP,YP SONT LES COORDONNEES DE L'ENDROIT OU ON ECRIT ``Bonne Annee'' * T EST LA TAILLE DE L'ECRITURE * XP=[1] ; YP=[2] ; T=[3] * * CHOIX DE LA POLICE DE CARACTERE (30=Times-Bold-Italic=Times-gras-italique) IGSET TXFP -30 * CHOIX DE LA TAILLE (CHHE=CHARACTER HEIGHT=HAUTEUR DES CARACTERES) IGSET CHHE [T] * * CHOIX DE LA COULEUR (TXCI=TEXT COLOR INDEX=INDICE DE LA COULEUR) IGSET TXCI 6 * * CHOIX DE L'OPTION DE PLACEMENT (AL=ALIGNEMENT,23=milieu en XP,YP) IGSET TXAL 23 TT=Bonne Annee ITX [XP] [YP] [TT] * RETURN ******************************************************* MACRO TESTBONAN * TEST DE LA MACRO UTILITAIRE BONAN * X1=0 ; X2=10 ; Y1=0 ; Y2=10 NULL [X1] [X2] [Y1] [Y2] * X=5 ; Y=6 ; T=1.2 ; EXEC ANIM2#BONAN [X] [Y] [T] * RETURN ********************************************************* MACRO VOEUX * CARTE DE VOEUX CONFECTIONNEE EN COMBINANT LES MACROS S6 ET S8 * * FABRICATION D'UN FICHIER POSTSCRIPT paw.ps CONTENANT LES GRAPHES FORTRAN/FILE 66 paw.ps * en hauteur (portrait) META 66 -111 * **** A) ON RECOPIE LA MACRO S8 POUR Y FAIRE DE LEGERES MODIFICATIONS IGSET * ; SET * * * 1) LES NOMBRES AU HASARD N=30 VE/CR H([N]) R ; SIGMA W=RNDM(H) SIGMA X=ARRAY([N],0#1) * * 2) ON DEFINIT LE REPERE D'AXES SANS TRACER LES AXES (OPTION AB) X1=0 ; X2=1 ; Y1=0 ; Y2=1 NULL [X1] [X2] [Y1] [Y2] AB * * 2) ON COLORE LE FOND DU GRAPHIQUE EN BLEU OU EN NOIR * FAIS=FILL AREA INTERIOR STYLE=CHOIX DU STYLE DE REMPLISSAGE * 0->pas de remplissage 1->plein 3->hachures IGSET FAIS 1 * FACI=FILL AREA COLOR INDEX=CHOIX DE LA COULEUR * 1->NOIR 4->BLEU IGSET FACI 4 BOX [X1] [X2] [Y1] [Y2] * * 3) ON PLACE LES POINTS DANS UN GRAPHIQUE * CHOIX DE LA COULEUR DES POINTS PAR PMCI=POLYMARKER COLOR INDEX, 0=BLANC IGSET PMCI 0 ; IGSET MSCF 6 ; GRAPH [N] X W * * **** B) ON RAJOUTE LE ``BONNE ANNEE'' PRODUIT PAR LA MACRO S6. * POUR CELA ON RECOPIE S6 POUR Y FAIRE DE LEGERES MODIFICATIONS. * DEFINITION ET DESSIN DU REPERE * * ON PLACE LES SYMBOLES S1=2.5 ; S2=5 IGSET PMCI 3 ; SET KSIZ [S1] XP=0.1 ; YP=0.5 ; KEY [XP] [YP] 21 IGSET PMCI 2 ; SET KSIZ [S2] XP=0.3 ; YP=0.6 ; KEY [XP] [YP] 20 IGSET PMCI 3 ; SET KSIZ [S1] XP=0.5 ; YP=0.5 ; KEY [XP] [YP] 21 * * ECRITURE IGSET TXFP -17 ; IGSET CHHE 1.15 ; IGSET TXCI 6 ; IGSET TXAL 20 TX=Bonne Ann\323e XP= 0.3 ; YP=0.38 ; ITX [XP] [YP] [TX] * * FERMETURE DU FICHIER POSTSCRIPT CLOSE 66 * VE/DE * RETURN *************************************************** MACRO COULEUR * COMMENT REMPLIR UNE SURFACE AVEC DE LA COULEUR? * ON A DEJA REPONDU A CETTE QUESTION DANS MAN2#S8 ET MAN2#VOEUX. * * ICI, ON VA LE VOIR DE FACON PLUS DETAILLEE EN UTILISANT * NON SEULEMENT LES 7 COULEURS DE BASE MAIS AUSSI DES COULEURS * CHOISIES PAR NOUS-MEMES. * EN PLUS DU REMPLISSAGE AVEC COULEUR ON VA AUSSI VOIR * LE REMPLISSAGE AVEC DES HACHURES. * * IL Y A TOUJOURS 4 ETAPES: * 1) ON DEFINIT LE REPERE * 1) ON DEFINIT LES 2 VECTEURS VX,VY DELIMITANT LE CONTOUR * 3) ON CHOISIT LES PARAMETRES DEFINISSANT LA COULEUR OU LES HACHURES * 4) ON FAIT LE REMPLISSAGE PAR FAREA * * 1) REPERE X1=-5 ; X2=5 ; Y1=-5 ; Y2=5 ; NULL [X1] [X2] [Y1] [Y2] * * 2) VECTEURS DELIMITANT LE CONTOUR N=3 ; VE/CR VX([N]) R -2 0 2 ; VE/CR VY([N]) R -3 4 -3 * * 3) CHOIX DES HACHURES OU DE LA COULEUR * RAPPELONS LES 3 COMMANDES: FAIS,FASI,FACI * IGSET FAIS =FILL AREA INTERIOR STYLE=CHOIX DU STYLE DE REMPLISSAGE * 0->pas de remplissage 1->plein 3->hachures * EX: IGSET FAIS 3 -> HACHURES * * IGSET FASI =FILL AREA STYLE INDEX= CHOIX DU TYPE DE HACHURE * EX: IGSET FASI 350 -> HACHURES HORIZONTALES * * IGSET FACI =FILL AREA COLOR INDEX=CHOIX DE LA COULEUR * 0->BLANC 1->NOIR 2-> ROUGE 3-> VERT 4->BLEU 5->JAUNE 6-> MAGENTA * EX: IGSET FACI 4 -> BLEU * POUR LES AUTRES COULEURS ON DEFINIT LES PROPORTIONS DE ROUGE,VERT,BLEU * COLOR_TABLE 101 0.5 0.7 0.1 * * VOICI QUELQUES EXEMPLES D'UTILISATION, VOUS POUVEZ EN FAIRE D'AUTRES * POUR CHOISIR UN EXEMPLE, FAITES CAS=1 OU CAS=2, ETC CAS=10 * IF [CAS]=1 THEN IGSET FAIS 3 ; IGSET FASI 750 FAREA [N] VX VY ENDIF * IF [CAS]=2 THEN IGSET FAIS 3 ; IGSET FASI 459 FAREA [N] VX VY ENDIF * IF [CAS]=3 THEN IGSET FAIS 3 ; IGSET FASI 790 FAREA [N] VX VY ENDIF * IF [CAS]=4 THEN IGSET FAIS 1 ; IGSET FACI 3 FAREA [N] VX VY ENDIF * IF [CAS]=5 THEN IGSET FAIS 1 ; COLOR_TABLE 101 1 0 0 ; IGSET FACI 101 FAREA [N] VX VY ENDIF * IF [CAS]=6 THEN IGSET FAIS 1 ; COLOR_TABLE 102 0.5 0 0 ; IGSET FACI 102 FAREA [N] VX VY ENDIF * * UN EXEMPLE AVEC 2 COULEURS IF [CAS]=7 THEN IGSET FAIS 1 ; COLOR_TABLE 103 0 0 0.5 ; IGSET FACI 103 BOX [X1] [X2] [Y1] [Y2] IGSET FACI 6 ; FAREA [N] VX VY ENDIF * * UN EXEMPLE AVEC 3 COULEURS IF [CAS]=8 THEN IGSET FAIS 1 ; COLOR_TABLE 104 0 0 0.5 ; IGSET FACI 104 BOX [X1] [X2] [Y1] [Y2] IGSET FACI 6 ; FAREA [N] VX VY SIGMA WX=0.2*VX ; SIGMA WY=0.2*VY IGSET FACI 0 ; FAREA [N] WX WY ENDIF * * MEME CHOSE MAIS AVEC DES COULEURS DIFFERENTES IF [CAS]=9 THEN IGSET FAIS 1 ; COLOR_TABLE 104 0 0.3 0 ; IGSET FACI 104 BOX [X1] [X2] [Y1] [Y2] COLOR_TABLE 105 0 0.5 0 ; IGSET FACI 105 ; FAREA [N] VX VY SIGMA WX=0.2*VX ; SIGMA WY=0.2*VY COLOR_TABLE 106 0 1 0 ; IGSET FACI 106 ; FAREA [N] WX WY ENDIF * * LE MOT DE LA FIN IF [CAS]=10 THEN IGSET FAIS 1 ; COLOR_TABLE 104 0 ; IGSET FACI 5 BOX [X1] [X2] [Y1] [Y2] IGSET TXFP -30 ; IGSET CHHE 5 ; IGSET TXAL 23 ; IGSET TXCI 4 XP=0 ; YP=0 ; ITX [XP] [YP] Fin ENDIF * * VE/DE * RETURN *************************************************** MACRO COUL * Usage: EXEC ANIM2#COUL 3 -> fait le dessin du cas no 3 * CETTE MACRO EST QUASI-IDENTIQUE A LA MACRO ANIM2#COULEUR, MAIS * EST CONCUE POUR ETRE UNE MACRO UTILITAIRE POUVANT * ETRE APPELEE AVEC LE No DU CAS QU'ON SOUHAITE * CAS=[1] * * REPERE X1=-5 ; X2=5 ; Y1=-5 ; Y2=5 ; NULL [X1] [X2] [Y1] [Y2] AB * * VECTEURS DELIMITANT LE CONTOUR N=3 ; VE/CR VX([N]) R -2 0 2 ; VE/CR VY([N]) R -3 4 -3 * IF [CAS]=1 THEN IGSET FAIS 3 ; IGSET FASI 750 FAREA [N] VX VY ENDIF * IF [CAS]=2 THEN IGSET FAIS 3 ; IGSET FASI 459 FAREA [N] VX VY ENDIF * IF [CAS]=3 THEN IGSET FAIS 3 ; IGSET FASI 790 FAREA [N] VX VY ENDIF * IF [CAS]=4 THEN IGSET FAIS 1 ; IGSET FACI 3 FAREA [N] VX VY ENDIF * IF [CAS]=5 THEN IGSET FAIS 1 ; COLOR_TABLE 101 1 0 0 ; IGSET FACI 101 FAREA [N] VX VY ENDIF * IF [CAS]=6 THEN IGSET FAIS 1 ; COLOR_TABLE 102 0.5 0 0 ; IGSET FACI 102 FAREA [N] VX VY ENDIF * * UN EXEMPLE AVEC 2 COULEURS IF [CAS]=7 THEN IGSET FAIS 1 ; COLOR_TABLE 103 0 0 0.5 ; IGSET FACI 103 BOX [X1] [X2] [Y1] [Y2] IGSET FACI 6 ; FAREA [N] VX VY ENDIF * * UN EXEMPLE AVEC 3 COULEURS IF [CAS]=8 THEN IGSET FAIS 1 ; COLOR_TABLE 104 0 0 0.5 ; IGSET FACI 104 BOX [X1] [X2] [Y1] [Y2] IGSET FACI 6 ; FAREA [N] VX VY SIGMA WX=0.2*VX ; SIGMA WY=0.2*VY IGSET FACI 0 ; FAREA [N] WX WY ENDIF * * MEME CHOSE MAIS AVEC DES COULEURS DIFFERENTES IF [CAS]=9 THEN IGSET FAIS 1 ; COLOR_TABLE 104 0 0.3 0 ; IGSET FACI 104 BOX [X1] [X2] [Y1] [Y2] COLOR_TABLE 105 0 0.5 0 ; IGSET FACI 105 ; FAREA [N] VX VY SIGMA WX=0.2*VX ; SIGMA WY=0.2*VY COLOR_TABLE 106 0 1 0 ; IGSET FACI 106 ; FAREA [N] WX WY ENDIF * * LE MOT DE LA FIN IF [CAS]=10 THEN IGSET FAIS 1 ; COLOR_TABLE 104 0 ; IGSET FACI 5 BOX [X1] [X2] [Y1] [Y2] IGSET TXFP -30 ; IGSET CHHE 5 ; IGSET TXAL 23 ; IGSET TXCI 4 XP=0 ; YP=0 ; ITX [XP] [YP] Fin ENDIF * VE/DE * RETURN *************************************************** MACRO TESTCOUL * TEST DE LA MACRO UTILITAIRE ANIM2#COUL * CM=10 DO C=1,[CM] EXEC ANIM2#COUL [C] * * TEMPORISATION *TM=1 *TM=10000 TM=100000 DO T=1,[TM] ; A=[T]+1 ; ENDDO * ENDDO * VE/DE * RETURN ***************************************************** MACRO TEXTE * RECOPIE DE PHILO/TESTMACRO/ANIM#FILMPAW * IGSET * ; SET * ; OPTION * | pr les cas ou on execute directement * K=2 * X1=0 ; X2=10 ; Y1=0 ; Y2=10 IGSET PLCI 2 * IF [K]=1 THEN LM=13 T1=_ Exploration 3D de la Chapelle des Penitents de Beaulieu. T2=Le film montre ce que verrait T3=_ une corneille qui volerait vers la chapelle en venant T4=_ du nord-ouest, puis en ferait le tour complet dans le sens T5=des aiguilles d une montre. T6=Ce film comporte environ 400 images (35 MB). T7= T8=La chapelle fut construite au XIIe siecle au bord de la T9= Dordogne,non loin du debarcadere ou accostaient T10=les gabares qui descendaient la Dordogne T11=avec des marchandises. T12=Actuellement, durant la saison estivale elle abrite des T13=expositions artistiques ou historiques. ENDIF **** IF [K]=2 THEN LM=3 T1=Bonjour, comment allez-vous? T2=Ravi de vous rencontrer. T3=Mon nom est Mathieu. ENDIF * * VALEURS POUR PAVE Q1=0.1 ; Q2=6 PX1=[Q1] ; PX2=[X2]-[Q1] ; PY1=[Q2] ; PY2=[Y2]-[Q1] W=0.4 * IGSET TXFP -10 ; IGSET CHHE 0.40 XP=1 ; YZ=9 ; E=0.5 * JE=0 DO L=1,[LM] MESSAGE L=[L] NC=$LEN([T[L]]) MESSAGE ligne [L]: [NC] caracteres * BOUCLE SUR LES CARACTERES DE CHAQUE LIGNE DO J=1,[NC] JE=[JE]+1 * FORTRAN/FILE 66 paw[JE].ps ; META 66 -113 ; MESSAGE paw[JE].ps * NULL [X1] [X2] [Y1] [Y2] AB PAVE [PX1] [PX2] [PY1] [PY2] [W] 0 1005 TR * IF [L]=1 THEN ; YP=[YZ] ; ENDIF * ON ECRIT LES LIGNES DEJA TRAITEES IF [L]>1 THEN LM1=[L]-1 ; YP=[YZ] DO L1=1,[LM1] IF [L1]<7 THEN ; IGSET TXCI 4 ; ENDIF IF [L1]>7 THEN ; IGSET TXCI 6 ; ENDIF YP=[YP]-[E] ; ITX [XP] [YP] [T[L1]] ENDDO ENDIF * * ON ECRIT LE CARACTERE NO J DE LA NOUVELLE LIGNE IF [L]<7 THEN ; IGSET TXCI 4 ; ENDIF IF [L]>7 THEN ; IGSET TXCI 6 ; ENDIF YP=[YP]-[E] S=$SUBSTRING([T[L]],1,[J]) ; ITX [XP] [YP] [S] * CLOSE 66 * * TEMPORISATION CM=10000 ; DO C=1,[CM] ; A=[C]+1 ; ENDDO * ENDDO | fin de la boucle sur les caracteres * ENDDO | fin de la boucle sur les lignes * MESSAGE ANIM2#TEXTE Nb de caract (i.e. nb images): [JE] * RETURN *************************************************** MACRO PARTICIPATION * TAUX DE PARTICIPATION AUX ELECTIONS POUR LE PARLEMENT EUROPEEN * N=7 * ANNEES VE/CR X([N]) R 1979 1984 1989 1994 1999 2004 2009 * TAUX DE PARTICIPATION VE/CR Y([N]) R 62.0 59.0 58.5 56.7 49.5 45.5 42.9 * SET VSIZ 0.3 | taille des chiffres des axes TT=Elections europeennes ; TITLE [TT] | titre du graphique * * 1) GRAPHIQUE DE BASE * A) REPERE X1=1978 ; X2=2022 ; Y1=30 ; Y2=65 ; NULL [X1] [X2] [Y1] [Y2] * * B) DEFINITION DES PARAMETRES DU GRAPHE * MTYP=TYPE DES POINTS (20=ROND), MSCF=TAILLE, PMCI=COULEUR DES POINTS IGSET MTYP 20 ; IGSET MSCF 1.6 ; IGSET PMCI 4 * * PLCI=COULEUR LIGNE, LWID=EPAISSEUR LIGNE , LTYP=TYPE DE LIGNE IGSET PLCI 4 ; IGSET LWID 8 ; IGSET LTYP 1 * * C) ON FAIT LE GRAPHE GRAPH [N] X Y LP * * D) LEGENDES DES AXES ATITLE ' ' 'Taux de participation (%)' * ***** * 2) PROLONGATION DE LA TENDANCE GOTO 2 * * EQUATION DE LA DROITE PASSANT PAR LES 2 POINTS EXTREMES: y=pente*x+b XA=X(1) ; XB=X([N]) ; YA=Y(1) ; YB=Y([N]) PENTE=$SIGMA(([YB]-[YA])/([XB]-[XA])) | formule classique pour pente B=$SIGMA([YA]-([PENTE])*[XA]) MESSAGE pente=[PENTE] b=[B] * * ON TRACE LA PROLONGATION DE CETTE DROITE SUR 2009,2020 VE/CR XD(2) R 2009 2020 ; SIGMA YD=[PENTE]*XD+[B] IGSET LTYP 3 ; IGSET LWID 12 ; GRAPH 2 XD YD L 2: * ***** * 3) A TITRE COMPARATIF: ELECTION DE 2010 POUR LE CONGRES US GOTO 3 * * PMCI=COULEUR DU POINT, KSIZ=TAILLE, IGSET PMCI 2 ; SET KSIZ 0.8 XP=2010 ; YP=41 ; KEY [XP] [YP] 20 * LEGENDE T1=Congres, ; T2=Etats-Unis * TXCI=COULEUR TEXTE, TXFP=CHOIX DE POLICE, CHHE=TAILLE CARACTERES IGSET TXCI 2 ; IGSET TXFP -10 ; IGSET CHHE 0.30 XP=2002.7 ; YP=41 ; ITX [XP] [YP] [T1] YP=39.9 ; ITX [XP] [YP] [T2] 3: * VE/DE * RETURN ************************************************************ MACRO ARIANE * DECOLLAGE DE LA FUSEE ARIANE (PR COURS PHILOTECHNIQUE) * * ON MET LES MARGES A ZERO SET XMGL 0.01 ; SET XMGR 0.01 ; SET YMGL 0.01 ; SET YMGU 0.01 X1=0 ; X2=10 ; Y1=0 ; Y2=10 NULL [X1] [X2] [Y1] [Y2] * * DEFINITION DE LA TRAJECTOIRE * * VECTEUR DES TEMPS N=10 *N=100 *N=300 TM=60 ; SIGMA T=ARRAY([N],0#[TM]) * * EQUATIONS PARAMETRIQUES * ALTITUDE YZ=0.3 ; YM=9 ; SIGMA Y=[YZ]+[YM]*(T/[TM])**2.3 * MOUVEMENT VERS L'EST XZ=2 ; Q=2 ; SIGMA X=[XZ]+[Q]*(T/[TM])**6 * * GRAPHIQUE IGSET TXFP -60 COLOR_TABLE 101 0.7 0.7 0 ***** * VERSION No 1: SANS FLAMME, SANS INCLINAISON *GOTO 1 DO I=1,[N] *NULL [X1] [X2] [Y1] [Y2] IGSET TXAL 23 ; IGSET TXCI 101 ; IGSET CHHE 1.1 XP=X([I]) ; YP=Y([I]) ; ITX [XP] [YP] A * * TEMPORISATION CM=30000 ; DO C=1,[CM] ; C=[C]+1 ; ENDDO ENDDO 1: ***** * VERSION No2: AVEC FLAMME, AVEC INCLINAISON GOTO 2 DO I=2,[N] *NULL [X1] [X2] [Y1] [Y2] A * * CALCUL DE L'INCLINAISON DE LA FUSEE IA=[I]-1 ; IB=[I] XA=X([IA]) ; XB=X([IB]) ; XAB=[XB]-[XA] YA=Y([IA]) ; YB=Y([IB]) ; YAB=[YB]-[YA] IF [XAB]=0 THEN ; XAB=0.0001 ; ENDIF PENTE=[YAB]/[XAB] * ANGLE EN RADIANS ANG=$SIGMA(ATAN([PENTE])) * CONVERSION DES RADIANS EN DEGRES ANG=$EVAL((180/3.1416)*[ANG]) ; ANG=[ANG]-90 ; IGSET TANG [ANG] MESSAGE i=[I] xab=[XAB] yab=[YAB] angle=[ANG] * IGSET TXAL 23 ; IGSET TXCI 101 ; IGSET CHHE 1.1 XP=X([I]) ; YP=Y([I]) ; ITX [XP] [YP] A *MESSAGE I=[I] XP=[XP] YP=[YP] IGSET PMCI 4 ; SET KSIZ 0.2 ; KEY [XP] [YP] 20 *YP=[YP]-0.4 IGSET TXCI 2 ; IGSET CHHE 1.5 ; IGSET TXAL 21 ; ITX [XP] [YP] I * * ECRITURE DU TEMPS DANS LE COIN SUPERIEUR DROIT TP=T([I]) ; IGSET TXCI 4 ; IGSET CHHE 0.4 ; IGSET TANG 0 *XP=8 ; YP=9 ; ITX [XP] [YP] [TP]s * * TEMPORISATION CM=20000 ; DO C=1,[CM] ; C=[C]+1 ; ENDDO ENDDO 2: * VE/DE * RETURN ************************************************ MACRO MATHIEU * usage: EXEC ANIM2#MATHIEU [MG] [MD] [PG] [PD] [H] [K] * -> dessin de Mathieu * LA MACRO DESSINE MATHIEU AVEC LES BRAS ET JAMBES DANS LA POSITION * INDIQUEE PAR LES 4 PREMIERS ARGUMENTS * ET LA BOUCHE DEFINIE PAR H ET K * * MG: MAIN GAUCHE MD: MAIN DROIT * PG: PIED GAUCHE PD: PIED DROIT * CES VARIABLES DONNENT LES ANGLES EN DEGRES, * PAR RAPPORT A L'HORIZONTALE POUR LES MAINS, * PAR RAPPORT A LA VERTICALE POUR LES PIEDS. * PLUS PRECISEMENT: * MAINS: ANGLE>0 -> BRAS LEVE (par rapport a l'horizontale) * MAINS: ANGLE<0 -> BRAS BAISSE * * PIEDS: ANGLE>0 -> PIEDS VERS L'EXTERIEUR * * H,K DEFINISSENT LA BOUCHE. * H EST UN PARAMETRE QUI TRADUIT L'HUMEUR DE MATHIEU, H=-1,0,1 * POUR H=-1, MATHIEU N'EST PAS CONTENT -> CONCAVITE TOURNEE VERS LE BAS * POUR H=0, LA BOUCHE EST UNE LIGNE HORIZONTALE * POUR H=1, MATHIEU EST CONTENT -> CONCAVITE TOURNEE VERS LE HAUT * K EST LE RAYON DE LA BOUCHE (IL FAUT K>L/2, L=LONGUEUR DE LA BOUCHE) * SI K EST GRAND, LA BOUCHE EST QUASI-PLATE, * SI K EST PROCHE DE L/2, LA BOUCHE FAIT PRESQUE UN DEMI-CERCLE. * * M1=[1] ; M2=[2] ; P1=[3] ; P2=[4] ; H=[5] ; K=[6] * * TRANSFORMATION DES DEGRES EN RADIANS PPI=3.1416 ; C=[PPI]/180 M1=[1]*[C] ; M2=[2]*[C] ; P1=[3]*[C] ; P2=[4]*[C] * ANGLES PAR RAPPORT A ox M1=[PPI]-[M1] ; P1=$EVAL(3*[PPI]/2-[P1]) ; P2=$EVAL(3*[PPI]/2+[P2]) * * LONGUEUR DES BRAS ET DES JAMBES B=2.5 ; J=3 * * DEFINITION DES COULEURS * * COULEUR DES CHEVEUX (BRUN) IC1=101 ; COLOR_TABLE [IC1] 0.6 0 0 * * COULEUR DES MAINS ET PIEDS (ROSE CLAIR) IC2=102 ; COLOR_TABLE [IC2] 1 0.8 0.8 * * REPERE QX=4 ; QY=4.5 ; X1=-[QX] ; X2=[QX] ; Y1=-[QY] ; Y2=[QY] *NULL [X1] [X2] [Y1] [Y2] AB *NULL [X1] [X2] [Y1] [Y2] IGSET FAIS 1 * * TRONC NT=4 T=1.5 ; TX1=[T] ; TX2=-[T] ; VE/CR XT([NT]) R [TX1] 0 [TX2] 0 T=2.2 ; TY1=[T] ; TY2=-[T] ; VE/CR YT([NT]) R 0 [TY1] 0 [TY2] IGSET FACI 3 ; FAREA [NT] XT YT * * CHEVEUX IGSET PLCI [IC1] XA=0 ; YA=2 ; PX=0.05 ; PY=0.6 ; YB=[YA]+[PY] XB=[XA] ; LINE [XA] [YA] [XB] [YB] CM=10 DO C=1,[CM] XA=[XA]-[PX] ; XB=[XA] LINE [XA] [YA] [XB] [YB] ENDDO XA=0 DO C=1,[CM] XA=[XA]+[PX] ; XB=[XA] LINE [XA] [YA] [XB] [YB] ENDDO * * YEUX IGSET LWID 10 ; IGSET PLCI 4 LY=0.15 ; LYX=0.5 ; LYY=1 XA=-[LYX]-[LY] ; YA=[LYY] ; XB=-[LYX]+[LY] ; YB=[YA] LINE [XA] [YA] [XB] [YB] XA=[LYX]-[LY] ; XB=[LYX]+[LY] LINE [XA] [YA] [XB] [YB] * * NEZ XN=0 ; YN=2.7 ; YN=0.7 ; R=0.05 ; ARC [XN] [YN] [R] * * BOUCHE IGSET PLCI 2 XA=-0.3 ; YA=0.2 ; XB=-[XA] ; YB=[YA] L=[XB]-[XA] *MESSAGE XA=[XA] YA=[YA] L=[L] H=[H] K=[K] XC=0 ; YC=[YA] EXEC ANIM2#BOUCHE [XC] [YC] [L] [H] [K] * *** BRAS ET MAINS IGSET FACI [IC2] IGSET LWID 40 ; IGSET PLCI 3 L=0.6 ; H=1.2 ; A1=-[L] VE/CR B1Z(2) R [A1] [H] ; VE/CR B2Z(2) R [L] [H] * * LA BOUCLE PORTE SUR GAUCHE=1, DROITE=2 DO K=1,2 M=[M[K]] *MESSAGE M=[M] CO=$SIGMA(COS([M])) ; SI=$SIGMA(SIN([M])) VE/CR BU(2) R [CO] [SI] ; SIGMA B=B[K]Z+[B]*BU XA=$EVAL(B[K]Z(1)) ; YA=$EVAL(B[K]Z(2)) ; XB=B(1) ; YB=B(2) LINE [XA] [YA] [XB] [YB] * R=0.3 ; ARC [XB] [YB] 0.01 [R] VE/DE BU ENDDO VE/DE B1Z,B2Z * *** JAMBES ET PIEDS IGSET LWID 50 IGSET FACI [IC1] H=-[H]+0.2 VE/CR B1Z(2) R [A1] [H] ; VE/CR B2Z(2) R [L] [H] * * LA BOUCLE PORTE SUR GAUCHE=1, DROITE=2 DO K=1,2 P=[P[K]] *MESSAGE P=[P] CO=$SIGMA(COS([P])) ; SI=$SIGMA(SIN([P])) VE/CR BU(2) R [CO] [SI] ; SIGMA B=B[K]Z+[J]*BU XA=$EVAL(B[K]Z(1)) ; YA=$EVAL(B[K]Z(2)) ; XB=B(1) ; YB=B(2) LINE [XA] [YA] [XB] [YB] * R=0.3 ; ARC [XB] [YB] 0.01 [R] VE/DE BU ENDDO VE/DE XT,YT,B1Z,B2Z * RETURN *************************************************** MACRO BOUCHE * usage: EXEC ANIM2#BOUCHE [XB] [YB] [L] [H] [K] -> dessine une bouche * XB,YB SONT LES COORDONNES DU CENTRE DE LA BOUCHE * L EST LA LONGUEUR HORIZONTALE DE LA BOUCHE * H EST UN PARAMETRE QUI TRADUIT L'HUMEUR DE MATHIEU, H=-1,0,1 * POUR H=-1, MATHIEU N'EST PAS CONTENT -> CONCAVITE TOURNEE VERS LE BAS * POUR H=0, LA BOUCHE EST UNE LIGNE HORIZONTALE * POUR H=1, MATHIEU EST CONTENT -> CONCAVITE TOURNEE VERS LE HAUT * K=RAYON DE LA BOUCHE (IL FAUT K>L/2, L=LONGUEUR DE LA BOUCHE) * SI K EST GRAND, LA BOUCHE EST QUASI-PLATE, * SI K EST PROCHE DE L/2, LA BOUCHE FAIT PRESQUE UN DEMI-CERCLE. * * XB=[1] ; YB=[2] ; L=[3] ; H=[4] ; K=[5] * IGSET PLCI 2 ; IGSET LWID 7 * * DEMI-LARGEUR DE LA BOUCHE L2=[L]/2 * * K NE PEUT PAS ETRE INFERIEUR A L/2 IF [K]<[L2] THEN MESSAGE BOUCHE: Attention!! K inf a L/2: K=[K] L/2=[L2] ENDIF * * DEMI-OUVERTURE DE L'ARC DE CERCLE A=$SIGMA(ASIN([L2]/[K])) ; Q=180/3.1416 ; A=[A]*[Q] * IF [H]=0 THEN XA=[XB]-[L2] ; XB=[XB]+[L2] ; YA=[YB] ; YB=[YB] LINE [XA] [YA] [XB] [YB] GOTO 1 ENDIF * IF [H]<0 THEN * COORDONNEES DU CENTRE DE L'ARC DE CERCLE XC=[XB] ; YC=[YB]-[K] * ANGLES DE L'ARC DE CERCLE A1=90-[A] ; A2=90+[A] ENDIF * IF [H]>0 THEN * COORDONNEES DU CENTRE DE L'ARC DE CERCLE XC=[XB] ; YC=[YB]+[K] * ANGLES DE L'ARC DE CERCLE A1=270-[A] ; A2=270+[A] ENDIF * *MESSAGE XC=[XC] YC=[YC] R=[K] A1=[A1] A2=[A2] ARC [XC] [YC] [K] [K] [A1] [A2] 1: * RETURN **************************************** MACRO LIREMOTIF * usage: EXEC ANIM2#LIREMOTIF nom [LM] -> lecture des lignes du motif ``nom'' * CETTE MACRO A 2 ARGUMENTS nom,[LM]. * CETTE MACRO A BESOIN DE LM FICHIERS APPELES: nom1,nom2,nom3,etc. * CHACUN DE CES FICHIERS CORRESPOND A UNE LIGNE (OUVERTE OU FERMEE) * DU DESSIN. * ELLE A AUSSI BESOIN D'UN VECTEUR APPELE nom * DE DIMENSION LM DONT LES * ELEMENTS DONNENT LES NOMBRES DE POINTS DE CHACUNE DES LIGNES DU DESSIN * (C'EST-A-DIRE LES LONGUEURS DES FICHIERS nom1,nom2,nom3,...) * * EXEMPLE D'UTILISATION: * POUR LE VISAGE DE MATHIEU ON A FAIT 5 LIGNES, CE QUI (PAR VLOCATE) * A DONNE LES FICHIERS: momat1,momat2,...,momat5 * DE PLUS ON A FAIT UN FICHIER momat * CONTENANT (VERTICALEMENT) LES NOMBRES: 156 11 12 18 32 * QUI SONT LES NOMBRES DE POINTS DE CHAQUE LIGNE DU DESSIN. * ON AURA DONC: nom=momat, LM=5 * ET ON APPELERA LA MACRO PAR: EXEC ANIM2#LIREMOTIF momat 5 * * ON DONNE DES NOMS AUX ARGUMENTS DE LA MACRO F=[1] ; LM=[2] * * LECTURE DU FICHIER CONTENANT LES NOMBRES DE POINTS DE CHAQUE LIGNE * COMME ON NE LIT QU'UN SEUL VECTEUR ON PEUT SE PASSER D'INDIQUER LE * FORMAT. VE/CR NT([LM]) R ; FN=[F] ; VE/READ NT [FN] * DO L=1,[LM] | boucle sur le nombre de lignes du motif * * CREATION DES VECTEURS QUI SERONT UTILISES POUR LIRE LES FICHIERS N=NT([L]) ; VE/CR VX([N]) R ; VE/CR VY([N]) R * * LECTURE DES FICHIERS FN=[F][L] ; FMT=2(F10.3) ; VE/READ VX,VY [FN] [FMT] * * ON ENREGISTRE LES VECTEURS VX,VY EN VUE D'UN USAGE ULTERIEUR, * PAR EXEMPLE POUR FAIRE UN CROQUIS OU METTRE DES COULEURS SIGMA X[L]=VX ; SIGMA Y[L]=VY * * ON DETRUIT LES VECTEURS VX,VY VE/DE VX,VY * ENDDO | fin de la boucle * * ON DETRUIT LE VECTEUR NT VE/DE NT * RETURN **************************************** MACRO GRAFMOTIF * usage: EXEC ANIM2#GRAFMOTIF [LM] -> dessin des lignes du motif ``nom'' * LM=NOMBRE DE LIGNES DU MOTIF * CETTE MACRO REQUIERT LES VECTEURS X1,Y1, X2,Y2,...CREES PAR LIREMOTIF * LM=[1] * DO L=1,[LM] | boucle sur le nombre de lignes du motif * * ON TRACE LA LIGNE NUMERO L IGSET LWID 4 ; N=$SIGMA(NCO(X[L])) ; GRAPH [N] X[L] Y[L] L * * ON MET (eventuellement) UN NUMERO A CHAQUE MOTIF *XP=$EVAL(X[L](1)) ; YP=$EVAL(Y[L](1)) ; IGSET TXCI 3 ; ITX [XP] [YP] [L] * ENDDO | fin de la boucle * RETURN ************************************************** MACRO MATHIEUVISAGE * * TRACER LES LIGNES DU VISAGE *GOTO 1 NULL 0 10 0 10 EXEC ANIM2#LIREMOTIF momat 5 EXEC ANIM2#GRAFMOT 5 1: *** * METTRE DES COULEURS GOTO 2 * COULEUR DU VISAGE (ROSE CLAIR) C1=101 ; COLOR_TABLE [C1] 1 0.8 0.8 * * COULEUR DES YEUX (BLANC) C2=0 * * COULEUR DU NEZ (ROSE FONCE) C4=104 ; COLOR_TABLE [C4] 0.8 0.5 0.5 * NULL 0 10 0 10 EXEC ANIM2#LIREMOTIF momat 5 EXEC ANIM2#GRAFMOT 5 * IGSET FAIS 1 * IGSET FACI [C1] ; N=$SIGMA(NCO(X1)) ; FAREA [N] X1 Y1 * IGSET FACI [C2] N=$SIGMA(NCO(X2)) ; FAREA [N] X2 Y2 N=$SIGMA(NCO(X3)) ; FAREA [N] X3 Y3 * IGSET FACI [C4] N=$SIGMA(NCO(X4)) ; FAREA [N] X4 Y4 2: *** * 3) CHANGEMENT D'HUMEUR DE MATHIEU GOTO 3 C1=101 ; COLOR_TABLE [C1] 1 0.8 0.8 C2=0 C4=104 ; COLOR_TABLE [C4] 0.8 0.5 0.5 IGSET FAIS 1 * JM=50 Q1=-1 ; VE/CR HT1([JM]) R [JM]*[Q1] ; SIGMA HT2=-HT1 SIGMA KT1=ARRAY([JM],1.6#10) ; SIGMA KT2=ARRAY([JM],10#1.6) * XB=4.6 ; YB=3.7 ; L=3 * DO I=1,[JM] NULL 0 10 0 10 AB EXEC ANIM2#LIREMOTIF momat 5 * IGSET FACI [C1] ; N=$SIGMA(NCO(X1)) ; FAREA [N] X1 Y1 IGSET FACI [C2] N=$SIGMA(NCO(X2)) ; FAREA [N] X2 Y2 N=$SIGMA(NCO(X3)) ; FAREA [N] X3 Y3 IGSET FACI [C4] ; N=$SIGMA(NCO(X4)) ; FAREA [N] X4 Y4 * H=HT1([I]) ; K=KT1([I]) EXEC ANIM2#BOUCHE [XB] [YB] [L] [H] [K] * * TEMPORISATION CM=20000 ; DO C=1,[CM] ; A=[C]+1 ; ENDDO ENDDO * DO I=1,[JM] NULL 0 10 0 10 AB EXEC ANIM2#LIREMOTIF momat 5 * IGSET FACI [C1] ; N=$SIGMA(NCO(X1)) ; FAREA [N] X1 Y1 IGSET FACI [C2] N=$SIGMA(NCO(X2)) ; FAREA [N] X2 Y2 N=$SIGMA(NCO(X3)) ; FAREA [N] X3 Y3 IGSET FACI [C4] ; N=$SIGMA(NCO(X4)) ; FAREA [N] X4 Y4 * H=HT2([I]) ; K=KT2([I]) EXEC ANIM2#BOUCHE [XB] [YB] [L] [H] [K] * * TEMPORISATION CM=20000 ; DO C=1,[CM] ; A=[C]+1 ; ENDDO ENDDO 3: * VE/DE * RETURN *************************************************** MACRO FILMGIF * FABRIQUE UN FILM gif AVEC JM IMAGES ps FABRIQUEES PAR * LA MACRO CORRESPONDANTE * * ON A REPRIS L'ESSENTIEL DU CODE DE ANIM#FILMGIF MAIS ICI FILMGIF * N'EST PLUS UNE MACRO UTILITAIRE (QU'IL FALLAIT APPELER * PAR ANIM#FILMEXEC) ET LES MACROS NE SONT PLUS DANS ANIM#FILMPAW * MAIS PLUTOT DS DES MACROS SEPARES QU'ON APPELLE ICI PAR * LEUR NOM SPECIFIQUE. * PR TRANSMETTRE LE NOMBRE D'IMAGES ON VA LE METTRE DS UN VECTEUR JT() * AINSI, AU LIEU D'AVOIR UNE STRUCTURE A 3 ETAGES ON A JUSTE 1 ETAGE * * LA PHILOSOPHIE EST LA SUIVANTE: * 1) ON MET LA MACRO AU POINT DS MAPI AVEC TEMPORISATION ET EN * L'EXECUTANT DIRECTEMENT (RAJOUTER DES IGSET * etc AU DEBUT) * 2) UNE FOIS QUE CA MARCHE, ON LA RECOPIE DS ANIM2 ET ON Y * MET LES INSTRUCTIONS PR CREER LES FICHIER ps. * 3) ON RAJOUTE UNE SECTION DS ANIM2#FILMGIF PR POUVOIR L'APPELER. * APRES AVOIR NEUTRALISE LA PARTIE bash ON EXECUTE AVEC * TEMPORISATION ET CREATION DE FICHIERS. SI CA MARCHE * ON ACTIVE LA PARTIE bash (ON PEUT LAISSER LA TEMPORISATION) * 4) ON RENOMME LE FILM ET ON LE RANGE DS PHILO/PROG/AGIF * * IL Y A 2 PARAMETRES CRUCIAUX: * (i) LE NOMBRE D'IMAGES jm (ii) LA DUREE de ENTRE IMAGES SUCCESSIVES * COMMENT LES CHOISIR? * jm DOIT ETRE ASSEZ GRAND POUR QUE LE FILM NE SOIT PAS SACCADE, * IL FAUT QUE CE SOIT FLUIDE, SANS SAUTS. * de: LE CHOIX DE de DEPEND DU SUJET. * S'IL S'AGIT D'ACTIVITES HUMAINES LES MOUVEMENTS DOIVENT SE FAIRE * A L'ALLURE NORMALE (PAS D'ACCELERE COMME DS LES FILMS DE CHARLOT), * IDEM POUR LE DECOLLAGE D'UNE FUSEE COMME ARIANE, * TEXTE QUI S'AFFICHE -> CONDITIONNE PAR LA VITESSE DE LECTURE, ETC. * * LE FILM VA S'APPELER: paw.gif; IL PEUT SE REGARDER AVEC gwenview * * JE VAIS TESTER CETTE PROCEDURE AVEC LA MACRO ANIM2#TEXTE * CA MARCHE, MAIS LE TEXTE N'EST PAS BEAU (EMPATE ET PLEIN DE BRUIT) * J'AI AUSSI ESSAYE tiff -> LONG ET RESULTAT DESASTREUX (CARREAUX) * J'AI AUSSI ESSAYE png -> PAS MIEUX QUE jpg * * DE=DELAI (EN CENTIEMES DE s) ENTRE IMAGES * REMARQUE: AVEC DE=30 (s/100), C'EST TRES SACCADE * * RECAPITULATION DES CAS: nom de macro, commentaire * 1) TEXTE (no 2), ecrit texte de presentation de Mathieu * 2) TESTMATHIEU (No 3), Mathieu agite bras et jambes * 3) ARIANEC Decollage Ariane 5 * PRELIMINAIRES * BASH=1 -> ON CREE LES FICHIERS jpg ET LE FILM gif * C=NUMERO DU FILM * JM=NOMBRE D'IMAGES, DE=TEMPS (EN 1/100s) ENTRE IMAGES BASH=1 *C=1 ; JM=72 ; DE=10 *C=2 ; JM=70 ; DE=7 C=3 ; JM=319 ; DE=10 * VE/CR JT(1) R [JM] * * POUR FAIRE DE LA PLACE ON SUPPRIME LES FICHIERS paw*.ps PRE-EXISTANT SHELL rm -f paw*.ps * MESSAGE ; T=$TIME ; MESSAGE DEBUT DE PAW: [T] * DEM=[DE]*10 ; DFILM=$EVAL(INT([JM]*[DE]/100)) MESSAGE MESSAGE FILM, bash=[BASH], [JM] images, d=[DEM] ms: film de [DFILM]s MESSAGE * * 1) EXECUTION DE LA MACRO PAW OPTION NBOX MESSAGE Debut de PAW TTZ=$CPTIME ; TT1=$CPTIME * IF [C]=1 THEN ; EXEC ANIM2#TEXTE ; ENDIF IF [C]=2 THEN ; EXEC ANIM2#TESTMATHIEU ; ENDIF IF [C]=3 THEN ; EXEC ANIM2#ARIANEC ; ENDIF * TT2=$CPTIME ; D=[TT2]-[TT1] ; DM=[D]/60 ; DM=$EVAL(INT([DM]*10)/10) T=$TIME MESSAGE MESSAGE FIN DE PAW, T=[T] temps CPU=[D]s = [DM]mn ; MESSAGE * ***** * 2) EXECUTION DU SCRIPT QUI FABRIQUE LE FILM DE JM IMAGES * LE FILM VA S'APPELER: paw.gif IF [BASH]<>1 GOTO 2 SHELL ./film.sh [JM] [DE] * * REMARQUE: LE TEMPS D'EXECUTION DE LA COMMANDE ``SHELL'' * N'A PAS L'AIR D'ETRE COMPTABILISE DS LE $CPTIME (TT3=0) * SI BIEN QU'ON NE PEUT PAS MESURER LE TEMPS D'EXECUTION TOTAL * DE CETTE FACON *TT3=$CPTIME ; MESSAGE TT3=[TT3] 2: * VE/DE * RETURN ************************************************* MACRO ARIANEC * ANIMATION POUR LES 5+20=25 PREMIERES SECONDES DU VOL D'ARIANE 5 * 3 PARTIES: * (a) FUSEE AU SOL AVANT ALLUMAGE K1 * (b) FUSEE AU SOL APRES ALLUMAGE VULCAIN K2 * (c) ALLUMAGE PROPULSEURS ET DECOLLAGE K3 * LORS D'UN VOL REEL LES TEMPS SONT LES SUIVANTS (EN s) * 00 ALLUMAGE VULCAIN * 07 ALLUMAGE PROPULSEURS A POUDRE, SUIVI A 7.3s PAR LE DECOLLAGE * 13 FIN DE LA MONTEE PUREMENT VERTICALE ET DEBUT INCLINAISON * CE DERNIER TEMPS A ETE REMPLACE PAR 20s CAR L'INCLINAISON NE * DEVIENT VISIBLE QU'A PARTIR DE CE MOMENT * IGSET * ; SET * ; OPTION * * AU TOTAL 319 IMAGES, DUREE ENTRE IMAGES: 0.1s=10 centiemes de s K1=50 ; K2=70 ; K3=200 *K1=30 ; K2=20 ; K3=10 * MAR=0.1 SET XMGL [MAR]; SET XMGR [MAR]; SET YMGL [MAR]; SET YMGU [MAR] Q=5 ; X1=-[Q] ; X2=[Q] ; Y1=-[Q] ; Y2=[Q] * nom=moar ; LM=6 ; EXEC ANIM2#LIREMOTIF [nom] [LM] * DO L=1,[LM] ; SIGMA XX[L]=X[L] ; SIGMA YY[L]=Y[L] ; ENDDO * J=0 * 1) AVANT ALLUMAGE MESSAGE DO K=1,[K1] J=[J]+1 *MESSAGE image numero [J] (avant allumage: [K]) * FORTRAN/FILE 66 paw[J].ps ; META 66 -113 ; MESSAGE paw[J].ps * NULL [X1] [X2] [Y1] [Y2] IGSET FAIS 1 ; IGSET FACI 4 ; BOX [X1] [X2] [Y1] [Y2] | ciel bleu * DO L=1,[LM] ; SIGMA X[L]=XX[L] ; SIGMA Y[L]=YY[L] ; ENDDO * YB=0.5 ; YB=[Y1]+[YB] LM=6 ; Q=1 ; XP=-0.1 ; YP=[YB] ; M=1 ; I=1 ; TET=0 EXEC ANIM2#MOTIFP [LM] [Q] [XP] [YP] [M] [I] [TET] * EXEC ANIM2#COULARIANE1 EXEC ANIM2#BANC * EXEC ANIM2#ECRITURE1 [K] * * TEMPORISATION CM=10000 ; DO C=1,[CM] ; A=[C]+1 ; ENDDO * CLOSE 66 ENDDO **** * 2) ENTRE ALLUMAGE VULCAIN ET ALLUMAGE PROPULSEURS MESSAGE DO K=1,[K2] J=[J]+1 *MESSAGE image numero [J] (apres allumage Vulcain: [K]) * FORTRAN/FILE 66 paw[J].ps ; META 66 -113 ; MESSAGE paw[J].ps * NULL [X1] [X2] [Y1] [Y2] AB IGSET FACI 4 ; BOX [X1] [X2] [Y1] [Y2] | ciel bleu * DO L=1,[LM] ; SIGMA X[L]=XX[L] ; SIGMA Y[L]=YY[L] ; ENDDO XB=1 ; YB=0.5 ; YB=[Y1]+[YB] LM=6 ; Q=1 ; XP=-0.1 ; YP=[YB] ; M=1 ; I=1 ; TET=0 EXEC ANIM2#MOTIFP [LM] [Q] [XP] [YP] [M] [I] [TET] * EXEC ANIM2#COULARIANE2 EXEC ANIM2#BANC EXEC ANIM2#ECRITURE2 [K] * * TEMPORISATION CM=10000 ; DO C=1,[CM] ; A=[C]+1 ; ENDDO * CLOSE 66 ENDDO **** * 3) APRES ALLUMAGE PROPULSEURS N=[K3] TM=60 ; SIGMA T=ARRAY([N],0#[TM]) * * EQUATIONS PARAMETRIQUES * ALTITUDE YZ=0 ; YM=9 ; SIGMA Y=[YZ]+[YM]*(T/[TM])**2.3 * VERS L'EST XZ=0 ; Q=2 ; SIGMA X=[XZ]+[Q]*(T/[TM])**6 * MESSAGE DO K=2,[K3] J=[J]+1 *MESSAGE image numero [J] (apres decollage: [K]) * FORTRAN/FILE 66 paw[J].ps ; META 66 -113 ; MESSAGE paw[J].ps * NULL [X1] [X2] [Y1] [Y2] AB IGSET FACI 4 ; BOX [X1] [X2] [Y1] [Y2] | ciel bleu * DO L=1,[LM] ; SIGMA X[L]=XX[L] ; SIGMA Y[L]=YY[L] ; ENDDO * * CALCUL DE L'INCLINAISON DE LA FUSEE I=[K] IA=[I]-1 ; IB=[I] XA=X([IA]) ; XB=X([IB]) ; XAB=[XB]-[XA] YA=Y([IA]) ; YB=Y([IB]) ; YAB=[YB]-[YA] SEUIL=0.01 ; IF [XAB]<[SEUIL] THEN ; PENTE=100 ; GOTO 1 ; ENDIF PENTE=[YAB]/[XAB] 1: * ANGLE EN RADIANS ANG=$SIGMA(ATAN([PENTE])) * CONVERSION DES RADIANS EN DEGRES ANG=$EVAL((180/3.1416)*[ANG]) ; ANG=[ANG]-90 *MESSAGE i=[I] xab=[XAB] yab=[YAB] angle=[ANG] * YT=Y([K]) ; YB=0.5 ; YB=$EVAL([Y1]+[YB]+[YT]) LM=6 ; Q=$EVAL(1-[K]*0.8/[K3]) ; XP=X([K]); XP=[XP]-0.1 ; YP=[YB] ; M=1;I=1 *MESSAGE XP=[XP] YP=[YP] EXEC ANIM2#MOTIFP [LM] [Q] [XP] [YP] [M] [I] [ANG] * EXEC ANIM2#BANC * * ON INTRODUIT DU BRUIT DANS LES TRAINEES DES PROPULSEURS NB=8 ; AM=0 ; SIG=0.05 ; EXEC ANIM2#NOR1 [AM] [SIG] [NB] VE/CR YB([NB]) R VE/CO Y5(1:[NB]) YB ; SIGMA YB=YB+A ; VE/DE A VE/CO YB Y5(1:[NB]) EXEC ANIM2#NOR1 [AM] [SIG] [NB] VE/CO Y6(1:[NB]) YB ; SIGMA YB=YB+A ; VE/DE A VE/CO YB Y6(1:[NB]) ; VE/DE YB * EXEC ANIM2#COULARIANE3 EXEC ANIM2#ECRITURE3 [K] * * TEMPORISATION CM=5000 ; DO C=1,[CM] ; A=[C]+1 ; ENDDO * CLOSE 66 ENDDO * FIN: VE/DE * RETURN ************************************************** MACRO BANC * DESSIN DU BANC DE LANCEMENT Q=5 ; X1=-[Q] ; X2=[Q] ; Y1=-[Q] ; Y2=[Q] NB=6 XB=0.7 ; XB1=-[XB] ; XB2=[XB] YSOL=0.08 ; YSOL=[Y1]+[YSOL] ; YB=0.5 ; YB=[Y1]+[YB] VE/CR XBANC([NB]) R [X1] [XB1] [XB1] [XB2] [XB2] [X2] VE/CR YBANC([NB]) R [YSOL] [YSOL] [YB] [YB] [YSOL] [YSOL] * IGSET LWID 20 ; IGSET PLCI 3 ; GRAPH [NB] XBANC YBANC L * VE/DE XBANC,YBANC RETURN ************************************************* MACRO ECRITURE1 * ECRITURE DE LA LEGENDE AVANT ALLUMAGE. * IL Y A 1 ARGUMENT QUI EST LE No DE L'IMAGE (=TEMPSx10) DE LA SEQUENCE K=[1] T1=Ariane 5, Vol 217 T2=Kourou: 22 mars 2014, 19:04 T3=Deux satellites: 5.7t + 3.0t IGSET TXFP -20 ; IGSET TXCI 0 ; IGSET CHHE 0.40 XP=-4.7 ; YP=4 ; ITX [XP] [YP] [T1] YD=0.5 ; YP=[YP]-[YD] ; ITX [XP] [YP] [T2] YD=0.5 ; YP=[YP]-[YD] ; ITX [XP] [YP] [T3] * IGSET TXCI 2 ; IGSET CHHE 0.55 XP=-4.0 ; YP=2 T=$EVAL(INT(5-[K]/10)) ; ITX [XP] [YP] t=-0[T]s * RETURN ************************************************* MACRO ECRITURE2 * ECRITURE DE LA LEGENDE ``ALLUMAGE VULCAIN'' * IL Y A 1 ARGUMENT QUI EST LE No DE L'IMAGE (=tempsx10) DANS LA SEQUENCE K=[1] T1=Allumage Vulcain IGSET TXFP -20 ; IGSET TXCI 0 ; IGSET CHHE 0.40 XP=-4.7 ; YP=4 IF [K]<=20 THEN ; ITX [XP] [YP] [T1] ; ENDIF T1=Test Vulcain IF [K]>20 THEN ; ITX [XP] [YP] [T1] ; ENDIF * I=[K] IGSET TXCI 2 ; IGSET CHHE 0.55 XP=-4.0 ; YP=2 T=$EVAL(INT([I]/10)) ; ITX [XP] [YP] t=0[T]s * RETURN ************************************************** MACRO ECRITURE3 * ECRITURE DE LA LEGENDE ``ALLUMAGE PROPULSEURS,DECOLLAGE'' * IL Y A 1 ARGUMENT QUI EST LE No DE L'IMAGE (=tempsx10) DE LA SEQUENCE K=[1] T1=Allumage propulseurs T2=Decollage IGSET TXFP -20 ; IGSET TXCI 0 ; IGSET CHHE 0.40 XP=-4.7 ; YP=4 IF [K]<20 THEN ITX [XP] [YP] [T1] YD=0.5 ; YP=[YP]-[YD] ; ITX [XP] [YP] [T2] ENDIF * I=[K]+70 | No image apres allumage Vulcain YP=3 T1=Ascension verticale IF [I]<210 THEN ; ITX [XP] [YP] [T1] ; ENDIF * T1=Debut inclinaison (tangage) B=$SIGMA([I] GT 210 AND [I] LT 230) IF [B]=1 THEN ; ITX [XP] [YP] [T1] ; ENDIF * IGSET TXCI 2 ; IGSET CHHE 0.55 XP=-4.0 ; YP=2 ; IGSET TXCI 2 ; T=$EVAL(INT([I]/10)) ; ITX [XP] [YP] t=0[T]s * RETURN ************************************************** MACRO COULARIANE1 * COULEURS POUR ARIANE 5 AVANT ALLUMAGE VULCAIN * DEFINITION DES COULEURS C1=101 ; COLOR_TABLE [C1] 1 0.7 0 | corps central C2=102 ; COLOR_TABLE [C2] 1 0.9 0 | propulseurs * * ON APPLIQUE LES COULEURS IGSET FAIS 1 * IGSET FACI [C1] ; N=$SIGMA(NCO(X1)) ; FAREA [N] X1 Y1 | corps central IGSET FACI [C2] ; N=$SIGMA(NCO(X2)) ; FAREA [N] X2 Y2 | propulseur droit IGSET FACI [C2] ; N=$SIGMA(NCO(X3)) ; FAREA [N] X3 Y3 | propulseur g. * RETURN ************************************************** MACRO COULARIANE2 * COULEURS POUR ARIANE 5 APRES ALLUMAGE VULCAIN * DEFINITION DES COULEURS C1=101 ; COLOR_TABLE [C1] 1 0.7 0 | corps central C2=102 ; COLOR_TABLE [C2] 1 0.9 0 | propulseurs C3=103 ; COLOR_TABLE [C3] 1 1 0.5 | trainee Vulcain * * ON APPLIQUE LES COULEURS IGSET FAIS 1 * IGSET FACI [C1] ; N=$SIGMA(NCO(X1)) ; FAREA [N] X1 Y1 | corps central IGSET FACI [C2] ; N=$SIGMA(NCO(X2)) ; FAREA [N] X2 Y2 | propulseur droit IGSET FACI [C2] ; N=$SIGMA(NCO(X3)) ; FAREA [N] X3 Y3 | propulseur g. IGSET FACI [C3] ; N=$SIGMA(NCO(X4)) ; FAREA [N] X4 Y4 | trainee Vulcain * RETURN ************************************************** MACRO COULARIANE3 * COULEURS POUR ARIANE 5 APRES DECOLLAGE * DEFINITION DES COULEURS C1=101 ; COLOR_TABLE [C1] 1 0.7 0 | corps central C2=102 ; COLOR_TABLE [C2] 1 0.9 0 | propulseurs C3=103 ; COLOR_TABLE [C3] 1 1 0.5 | trainee Vulcain C4=105 ; COLOR_TABLE [C4] 1 0 0 | trainee propulseur * * ON APPLIQUE LES COULEURS IGSET FAIS 1 * IGSET FACI [C1] ; N=$SIGMA(NCO(X1)) ; FAREA [N] X1 Y1 | corps central IGSET FACI [C2] ; N=$SIGMA(NCO(X2)) ; FAREA [N] X2 Y2 | propulseur droit IGSET FACI [C2] ; N=$SIGMA(NCO(X3)) ; FAREA [N] X3 Y3 | propulseur g. IGSET FACI [C3] ; N=$SIGMA(NCO(X4)) ; FAREA [N] X4 Y4 | trainee Vulcain IGSET FACI [C4] ; N=$SIGMA(NCO(X5)) ; FAREA [N] X5 Y5 | trainee prop.d IGSET FACI [C4] ; N=$SIGMA(NCO(X6)) ; FAREA [N] X6 Y6 | trainee prop.g * RETURN ************************************************** MACRO MOTIFP * usage: EXEC ANIM#MOTIFP [G] [Q] [XP] [YP] [M] [I] [TET] -> X[J],Y[J] du motif * CETTE MACRO A BESOIN DE G VECTEURS X[J],Y[J] DEFINISSANT LE MOTIF. * CES VECTEURS SONT DEFINIS DANS ANIM#LECM [M] (M=no DU MOTIF). * ON FAIT SUBIR A CE MOTIF 3 TRANSFORMATIONS: * (i) UNE ROTATION D'ANGLE TET (EN DEGRES) PAR RAPP. A POSITION INITIALE, * (ii) UNE HOMOTETHIE DE RAPPORT Q PAR RAPPORT AU CENTRE DU MOTIF, * (iii) UNE TRANSLATION AU POINT (XP,YP) -> VOIR DETAILS CI-DESSOUS. * LA MACRO FOURNIT LES VECTEURS X[J],Y[J] (QUI PRENNENT LA PLACE DES * VECTEURS INITIAUX) DEFINISSANT LE MOTIF TRANSFORME. * ENSUITE POUR DESSINER LE MOTIF IL FAUT APPELER LA MACRO QUI FAIT * LE DESSIN. * * Q<1 -> REDUCTION, Q>1 -> AGRANDISSEMENT * XP,YP: NOUVELLE POSITION DU CENTRE DU MOTIF * TET: ANGLE DE ROTAT EN DEG (ANGLE>0 -> SENS TRIGONOM.=ANTI-HORAIRE) * * METHODE: * 1) ON RECHERCHE LE CENTRE C DE COORDONNEES (CX,CY) DU MOTIF * 2) ON DEFINIT LES VECTEURS XC[K],YC[K] DU MOTIF PAR RAPPORT A C * 3) ON FAIT UNE ROTATION D'ANGLE TET * 4) ON FAIT UNE HOMOTETHIE DE CENTRE C ET DE RAPPORT Q ET * 5) ON TRANSLATE LA FIGURE REDUITE PR L'AMENER DANS LA POSITION VOULUE * IL Y A DEUX OPTIONS FIXES PAR [M],[I] * SI M=I=0 ON MET C EN (XP,YP) * SI M,I>0 C'EST LE POINT I DU MOTIF M QU'ON MET EN (XP,YP) * G=[1] ; Q=[2] ; XP=[3] ; YP=[4] ; M=[5] ; I=[6] ; TET=[7] * * 1) RECHERCHE DU CENTRE DU MOTIF VE/CR XTI([G]) R ; VE/CR XTX([G]) R VE/CR YTI([G]) R ; VE/CR YTX([G]) R * DO J=1,[G] * minimums XMI=$SIGMA(VMIN(X[J])) ; VE/IN XTI([J]) [XMI] YMI=$SIGMA(VMIN(Y[J])) ; VE/IN YTI([J]) [YMI] * maximums XMX=$SIGMA(VMAX(X[J])) ; VE/IN XTX([J]) [XMX] YMX=$SIGMA(VMAX(Y[J])) ; VE/IN YTX([J]) [YMX] ENDDO * XMI=$SIGMA(VMIN(XTI)) ; YMI=$SIGMA(VMIN(YTI)) XMX=$SIGMA(VMAX(XTX)) ; YMX=$SIGMA(VMAX(YTX)) * * CENTRE CX=$SIGMA(([XMI]+[XMX])/2) ; CY=$SIGMA(([YMI]+[YMX])/2) *MESSAGE centre = ([CX],[CY]) * * 2) DEFINITION DES VECTEURS PAR RAPPORT A C DO J=1,[G] ; SIGMA XC[J]=X[J]-[CX] ; SIGMA YC[J]=Y[J]-[CY] ; ENDDO * * 3) SI TET EST NON NUL ON FAIT UNE ROTATION D'ANGLE TET AUTOUR DE C * PASSAGE DES DEGRES AUX RADIANS IF [TET]<>0 THEN TET=$SIGMA([TET]*(3.1416/180)) * * CALCUL DU cosinus ET DU sinus VE/CR VT(1) R [TET] ; SIGMA VC=COS(VT) ; SIGMA VS=SIN(VT) C=VC(1) ; S=VS(1) *MESSAGE cos=[C] sin=[S] * DO J=1,[G] SIGMA XR[J]=XC[J]*[C]-YC[J]*[S] SIGMA YR[J]=XC[J]*[S]+YC[J]*[C] SIGMA XC[J]=XR[J] ; SIGMA YC[J]=YR[J] ENDDO | fin de la boucle sur J * VE/DE VT,VC,VS ENDIF * * 4) MULTIPLICATION DES VECTEURS XC[J],YC[J] PAR Q * ET TRANSLATION -> 2 OPTIONS IF [M]=0 THEN DO J=1,[G] SIGMA X[J]=[XP]+[Q]*XC[J] ; SIGMA Y[J]=[YP]+[Q]*YC[J] ENDDO ENDIF * IF [M]>0 THEN IF [M]>[G] THEN ; MOTIFP: ATTENTION M>G M=[M] G=[G] ; ENDIF * ON FAIT L'HOMOTETHIE DO J=1,[G] ; SIGMA X[J]=[XP]+[Q]*XC[J] ; SIGMA Y[J]=[YP]+[Q]*YC[J] ; ENDDO * * ON MET LE POINT (M,I) EN (XP,YP) XMI=$EVAL(X[M]([I])) ; YMI=$EVAL(Y[M]([I])) DO J=1,[G] SIGMA X[J]=X[J]+([XP]-[XMI]) SIGMA Y[J]=Y[J]+([YP]-[YMI]) ENDDO ENDIF * * 5) ENREGISTREMENT DES VECTEURS POUR FAIRE UN SUPER-MOTIF TST=$VEXIST(VL1) | teste si le vecteur VL1 existe (TST=1) ou non (TST=0) IF [TST]>0 THEN LE=VL1(1) *MESSAGE MOTIFQ: LE=[LE] DO J=1,[G] LE=[LE]+1 ; SIGMA SX[LE]=X[J] ; SIGMA SY[LE]=Y[J] ENDDO VE/IN VL1(1) [LE] ENDIF * VE/DE XTI,YTI,XTX,YTX * RETURN ************************************************** MACRO TESTMOTIFP * TEST DE LA MACRO MAPI#MOTIFP * N=5 ; VE/CR X1([N]) R 5 7 7 5 5 ; VE/CR Y1([N]) R 8 8 9 9 8 * Q=10 ; X1=0 ; X2=[Q] ; Y1=0 ; Y2=[Q] NULL [X1] [X2] [Y1] [Y2] IGSET LWID 6 * * MOTIF INITIAL EN BLEU IGSET PLCI 4 ; GRAPH [N] X1 Y1 L XP= 5 ; YP=9.2 ; IGSET TXCI 4 ; ITX [XP] [YP] Position initiale * * ON NUMEROTE LES COINS DU RECTANGLE N1=[N]-1 DO I=1,[N1] XP=X1([I]) ; YP=Y1([I]) ; IGSET TXCI 3 ; ITX [XP] [YP] [I] ENDDO * * ON FAIT UNE GRANDE CROIX SUR LE POINT (xp,yp) XP=3 ; YP=4 IGSET LTYP 2 ; IGSET LWID 2 LINE [XP] [Y1] [XP] [Y2] ; LINE [X1] [YP] [X2] [YP] IGSET LTYP 1 ; IGSET LWID 6 **** * 1) ON AMENE LE CENTRE DU MOTIF EN (XP,YP) SANS AUTRE TRANSFORMATION *GOTO 1 G=1 ; Q=1 ; M=0 ; I=3 ; TET=0 EXEC ANIM2#MOTIFP [G] [Q] [XP] [YP] [M] [I] [TET] IGSET PLCI 2 ; GRAPH [N] X1 Y1 L 1: **** * 2) EN PLUS ON FAIT UNE DILATATION DU MOTIF INITIAL GOTO 2 G=1 ; Q=2 ; M=0 ; I=3 ; TET=0 EXEC ANIM2#MOTIFP [G] [Q] [XP] [YP] [M] [I] [TET] IGSET PLCI 2 ; GRAPH [N] X1 Y1 L 2: **** * 3) EN PLUS ON FAIT UNE ROTATION GOTO 3 G=1 ; Q=2 ; M=0 ; I=3 ; TET=30 EXEC ANIM2#MOTIFP [G] [Q] [XP] [YP] [M] [I] [TET] IGSET PLCI 2 ; GRAPH [N] X1 Y1 L 3: **** * 4) AU LIEU D'AMENER LE CENTRE EN (XP,YP) ON Y AMENE LE POINT No 1 GOTO 4 G=1 ; Q=2 ; M=1 ; I=1 ; TET=30 EXEC ANIM2#MOTIFP [G] [Q] [XP] [YP] [M] [I] [TET] IGSET PLCI 2 ; GRAPH [N] X1 Y1 L 4: **** * 5) MEME CHOSE QU'EN (4) MAIS AVEC UN ANGLE NEGATIF GOTO 5 G=1 ; Q=2 ; M=1 ; I=1 ; TET=-30 EXEC ANIM2#MOTIFP [G] [Q] [XP] [YP] [M] [I] [TET] IGSET PLCI 2 ; GRAPH [N] X1 Y1 L 5: **** * 6) ON REMPLACE LE RECTANGLE PAR ARIANE 5 ET ON FAIT LES * MEMES TRANSFORMATIONS GOTO 6 Q=5 ; X1=-[Q] ; X2=[Q] ; Y1=-[Q] ; Y2=[Q] NULL [X1] [X2] [Y1] [Y2] nom=moar ; LM=6 ; EXEC ANIM2#LIREMOTIF [nom] [LM] * * POSITION INITIALE EXEC ANIM2#GRAFMOTIF [LM] IGSET TXAL 23 ; IGSET TXCI 4 XP=0 ; YP=3 ; ITX [XP] [YP] Position YP=2.6 ; ITX [XP] [YP] initiale * * ON MARQUE UN POINT SELECTIONNE (POUR LA SUITE) M=5 ; I=1 XA=$EVAL(X[M]([I])) ; YA=$EVAL(Y[M]([I])) SET KSIZ 0.5 ; IGSET PMCI 3 ; KEY [XA] [YA] 24 * * ON FAIT LA CROIX CENTREE SUR (xp,yp) XP=3 ; YP=1 IGSET LTYP 2 ; IGSET LWID 2 LINE [XP] [Y1] [XP] [Y2] ; LINE [X1] [YP] [X2] [YP] IGSET LTYP 1 ; IGSET LWID 6 **** * TRANSLATION * JUSTE POUR VOIR REMPLACER G=6 PAR G=1 *GOTO 6A G=6 ; Q=1 ; M=0 ; I=3 ; TET=0 EXEC ANIM2#MOTIFP [G] [Q] [XP] [YP] [M] [I] [TET] IGSET PLCI 2 ; EXEC ANIM2#GRAFMOTIF [LM] 6A: **** * EN PLUS ON RAPETISSE GOTO 6B G=6 ; Q=0.3 ; M=0 ; I=3 ; TET=0 EXEC ANIM2#MOTIFP [G] [Q] [XP] [YP] [M] [I] [TET] IGSET PLCI 2 ; EXEC ANIM2#GRAFMOTIF [LM] 6B: **** * EN PLUS ON FAIT UNE ROTATION GOTO 6C G=6 ; Q=0.5 ; M=0 ; I=3 ; TET=30 EXEC ANIM2#MOTIFP [G] [Q] [XP] [YP] [M] [I] [TET] IGSET PLCI 2 ; EXEC ANIM2#GRAFMOTIF [LM] 6C: **** * LE POINT SELECTIONNE EN (XP,YP) GOTO 6D G=6 ; Q=0.5 ; M=5 ; I=1 ; TET=0 EXEC ANIM2#MOTIFP [G] [Q] [XP] [YP] [M] [I] [TET] IGSET PLCI 2 ; EXEC ANIM2#GRAFMOTIF [LM] 6D: 6: **** * VE/DE * RETURN **************************************************************************** MACRO NOR1 * usage: EXEC SIMU#NOR1 [AM] [SIG] [N] -> A(N) * FABRICATION D'UN VECTEUR ALEATOIRE NORMAL * UTILISATION: 3 ARGUMENTS: MOYENNE[1] ECART-TYPE[2] DIMENSION[3] * RESULTATS : A * * QUESTION: PEUT-ON UTILISER LES SP DE LA CERNLIB DS COMIS? * CA M'ETONNERAIT, MAIS J'ESSAIE QUAND MEME AVEC RBINOM * REPONSE : CA NE MARCHE PAS -> MISSING ROUTINE RBINOM * * ON UTILISE DONC LA METHODE INDIQUEE DANS CERN PROGRAM * LIBRARY (P. 6.452) * * A) ON TIRE DEUX V.A. DS (0,1) VE/CR WW([3]) R SIGMA XXX1=RNDM(WW) ; SIGMA YYY1=RNDM(WW) * * B) TRANSFORMATION SIGMA A=[1]+[2]*SIN(2*PI*XXX1)*SQRT(-2*LOG(YYY1)) * VE/DE WW,XXX1,YYY1 RETURN ******************************************************** MACRO ARIANEB * PREMIERES SECONDES DU VOL D'ARIANE 5 * POUR CONSTRUIRE CETTE ANIMATION ON PROCEDE PAR * ETAPES SUCCESSIVES. ICI ON NE VAS FAIRE QUE DES IMAGES * FIXES. L'ANIMATION EST FAITE DANS ARIANEC * IGSET * ; SET * ; OPTION * MAR=0.1 SET XMGL [MAR]; SET XMGR [MAR]; SET YMGL [MAR]; SET YMGU [MAR] Q=5 ; X1=-[Q] ; X2=[Q] ; Y1=-[Q] ; Y2=[Q] NULL [X1] [X2] [Y1] [Y2] AB IGSET FAIS 1 ; IGSET FACI 4 ; BOX [X1] [X2] [Y1] [Y2] | ciel bleu * nom=moar ; LM=6 ; EXEC ANIM2#LIREMOTIF [nom] [LM] * * 1) CROQUIS D'ARIANE 5 (VERIF DES LIGNES ENREGISTREES PAR VLOCATE) * ON UTILISE POUR CELA LA MACRO LIMOT VUE LE 21 MARS 2014 * IL Y A 1+6=7 FICHIERS QUI ONT POUR NOMS: * moar,moar1,...,moar6 *GOTO 1 IGSET PLCI 0 ; EXEC ANIM2#GRAFMOTIF [LM] 1: **** * 2) ON RAJOUTE LES COULEURS POUR LA FUSEE EN PLEIN VOL. * BIEN SUR VOUS POUVEZ CHANGER LES COULEURS SI ELLES NE VOUS * PLAISENT PAS. NOTEZ QU'ON A DU MAL A OBTENIR LES COULEURS * BRILLANTES DES TRAINEES TELLES QUE L'ON LES VOIT SUR LES * PHOTOS. GOTO 2 EXEC ANIM2#COULARIANE3 2: **** * 3) FAMILIARISATION AVEC LA MACRO MOTIFP * DANS LA PARTIE PRECEDENTE ON A REPRESENTE LA FUSEE EN PLEIN * VOL. MAIS QUE FAUDRAIT-IL FAIRE POUR LA METTRE AU NIVEAU DU SOL? * IL FAUDRAIT RETRANCHER AUX 6 VECTEURS Y1,Y2,...,Y5 LA LONGUEUR * APPROPRIEE. * CETTE OPERATION EST REALISEE PAR LA MACRO MOTIFP * CETTE MACRO PERMET NON SEULEMENT DE PLACER UN POINT DU MOTIF * A L'ENDROIT QU'ON SOUHAITE, MAIS PERMET AUSSI DE CHANGER LA * TAILLE OU L'ORIENTATION DU MOTIF. * DANS LA SUITE ON VA UTLISER MOTIFP SANS ARRET. IL EST DONC * IMPORTANT DE SE FAMILIARISER AVEC CETTE MACRO. * CELA EST FAIT DANS LA MACRO ``TESTMOTIFP''. * POUR VERIFIER QUE VOUS AVEZ BIEN COMPRIS L'UTILISATION * DE ``MOTIFP'' FAITES UN TEST EN * DESSINANT D'ABORD LA POSITION QUE VOUS VOULEZ, PUIS EN CHOISISSANT * LES ARGUMENTS APPROPRIES. GOTO 3 *LM=6 ; Q= ; XP= ; YP= ; M= ; I= ; TET= *EXEC ANIM2#MOTIFP [LM] [Q] [XP] [YP] [M] [I] [TET] * EXEC ANIM2#COULARIANE2 3: **** * 4) LES 4 PHASES DU DECOLLAGE * (a) FUSEE AU SOL AVANT ALLUMAGE * (b) FUSEE AU SOL APRES ALLUMAGE VULCAIN * (c) FUSEE AU SOL APRES ALLUMAGE DES PROPULSEURS * (d) FUSEE EN VOL GOTO 4 * ON RAPPROCHE LA FUSEE DU SOL ET ON DESSSINE LE BANC DE LANCEMENT *GOTO 4A XB=1 ; YB=0.5 ; YB=[Y1]+[YB] LM=6 ; Q=1 ; XP=0 ; YP=[YB] ; M=1 ; I=1 ; TET=0 EXEC ANIM2#MOTIFP [LM] [Q] [XP] [YP] [M] [I] [TET] * EXEC ANIM2#COULARIANE1 EXEC ANIM2#BANC 4A: *** * ALLUMAGE DU MOTEUR CENTRAL GOTO 4B XB=1 ; YB=0.5 ; YB=[Y1]+[YB] LM=6 ; Q=1 ; XP=0 ; YP=[YB] ; M=1 ; I=1 ; TET=0 EXEC ANIM2#MOTIFP [LM] [Q] [XP] [YP] [M] [I] [TET] * EXEC ANIM2#COULARIANE2 EXEC ANIM2#BANC 4B: *** * ALLUMAGE PROPULSEURS GOTO 4C XB=1 ; YB=0.5 ; YB=[Y1]+[YB] LM=6 ; Q=1 ; XP=0 ; YP=[YB] ; M=1 ; I=1 ; TET=0 EXEC ANIM2#MOTIFP [LM] [Q] [XP] [YP] [M] [I] [TET] * EXEC ANIM2#BANC EXEC ANIM2#COULARIANE3 4C: *** * DECOLLAGE GOTO 4D XB=1 ; YB=0.5 ; YB=[Y1]+[YB] LM=6 ; Q=1 ; XP=0 ; YP=-3 ; M=1 ; I=1 ; TET=0 EXEC ANIM2#MOTIFP [LM] [Q] [XP] [YP] [M] [I] [TET] * EXEC ANIM2#BANC EXEC ANIM2#COULARIANE3 4D: 4: * VE/DE * RETURN ****************************************************** MACRO DIAPORAMA * ESSAIS POUR DEVELOPPER DES IMAGES FIXES AVEC INCRUSTATIONS FIXES * OU (LEGEREMENT) MOBILES * SHELL ./diapo.sh * RETURN ***************************************************** MACRO TESTMATHIEU * TEST DE LA MACRO ANIM2#MATHIEU * * 1) IMAGE STATIQUE DE MATHIEU + EXERCICE *GOTO 1 *FORTRAN/FILE 66 paw.ps ; META 66 -113 OPTION BOX MAR=0.1 SET XMGL [MAR]; SET XMGR [MAR]; SET YMGL [MAR]; SET YMGU [MAR] * MG=10 ; MD=80 ; PG=10 ; PD=30 ; H=1 ; K=0.3 EXEC ANIM2#MATHIEU [MG] [MD] [PG] [PD] [H] [K] *CLOSE 66 1: **** * 2) MOUVEMENT D'UN BRAS: HORIZONTAL -> VERTICAL GOTO 2 N=20 A1=0 ; A2=80 ; SIGMA VMD=ARRAY([N],[A1]#[A2]) MG=10 ; PG=5 ; PD=[PG] ; H=-1 ; K=0.3 DO I=1,[N] MD=VMD([I]) ; EXEC ANIM2#MATHIEU [MG] [MD] [PG] [PD] [H] [K] * * TEMPORISATION CM=30000 ; DO C=1,[CM] ; A=[C]+1 ; ENDDO ENDDO 2: **** * 3) MOUVEMENT DE LA BOUCHE: HORIZONTALE -> DEMI-CERCLE GOTO 3 JM=50 N=[JM] TM=60 ; SIGMA T=ARRAY([N],0#[TM]) * * BOUCHE: 0.30 EST LA DEMI-LARGEUR DE LA BOUCHE SIGMA KT=ARRAY([N],1.0#0.305) * MD=-30 ; MG=-30 ; PD=0 ; PG=0 ; H=1 * DO I=1,[N] K=KT([I]) EXEC ANIM2#MATHIEU [MG] [MD] [PG] [PD] [H] [K] * * TEMPORISATION CM=20000 ; DO C=1,[CM] ; A=[C]+1 ; ENDDO * ENDDO 3: **** * 4) MOUVEMENTS REPETES D'UN BRAS ET D'UNE JAMBE GOTO 4 JM=50 | nombre d'images de l'animation N=[JM] TM=60 ; SIGMA T=ARRAY([N],0#[TM]) * * DEFINITION DES ANGLES DES BRAS ET JAMBES * NB EST LE NOMBRE DE PERIODES: PERIODE=TM/NB NB=2 ; TP=[TM]/[NB] PPI=3.1416 ; OM=$EVAL(2*[PPI]/[TP]) * A1,A2 SONT LES ANGLES LIMITES DU MOUVEMENT * AZ EST LE MILIEU DU SINUS, AA EST SA DEMI-AMPLITUDE A1=10 ; A2=70 AZ=[A1]+[A2] ; AZ=[AZ]/2 ; AA=[A2]-[A1] ; AA=[AA]/2 SIGMA VM=[AZ]+[AA]*SIN([OM]*T) A1=10 ; A2=20 AZ=[A1]+[A2] ; AZ=[AZ]/2 ; AA=[A2]-[A1] ; AA=[AA]/2 SIGMA VP=[AZ]+[AA]*COS([OM]*T) MG=10 ; PD=0 * DO I=1,[N] * MD=VM([I]) ; PG=VP([I]) ; H=1 ; K=0.3 EXEC ANIM2#MATHIEU [MG] [MD] [PG] [PD] [H] [K] * * TEMPORISATION CM=20000 ; DO C=1,[CM] ; A=[C]+1 ; ENDDO * ENDDO 4: **** * 5) MOUVEMENT BRAS,JAMBE + BOUCHE (COMBINAISON DES 2 PRECEDENTS) GOTO 5 * TEXTE *EXEC ANIM2#TEXTE * JM=50 N=[JM] TM=60 ; SIGMA T=ARRAY([N],0#[TM]) * NB EST LE NOMBRE DE PERIODES: PERIODE=TM/NB NB=2 ; TP=[TM]/[NB] PPI=3.1416 ; OM=$EVAL(2*[PPI]/[TP]) * A1,A2 SONT LES ANGLES LIMITES DU MOUVEMENT * AZ EST LE MILIEU DU SINUS, AA EST SA DEMI-AMPLITUDE A1=10 ; A2=70 AZ=[A1]+[A2] ; AZ=[AZ]/2 ; AA=[A2]-[A1] ; AA=[AA]/2 SIGMA VM=[AZ]+[AA]*SIN([OM]*T) A1=10 ; A2=20 AZ=[A1]+[A2] ; AZ=[AZ]/2 ; AA=[A2]-[A1] ; AA=[AA]/2 SIGMA VP=[AZ]+[AA]*COS([OM]*T) MG=10 ; PD=0 * * BOUCHE: 0.30 EST LA DEMI-LARGEUR DE LA BOUCHE SIGMA KT=ARRAY([N],1.0#0.305) * DO I=1,[N] *FORTRAN/FILE 66 paw[I].ps ; META 66 -113 ; MESSAGE paw[I].ps * MD=VM([I]) ; PG=VP([I]) ; H=1 ; K=KT([I]) EXEC ANIM2#MATHIEU [MG] [MD] [PG] [PD] [H] [K] * * TEMPORISATION CM=20000 ; DO C=1,[CM] ; A=[C]+1 ; ENDDO * *CLOSE 66 ENDDO 5: * VE/DE * RETURN *********************************************** MACRO SPRINT * utilisation: EXEC MANY#SPRINT V * IMPRIME LE VECTEUR V EN UTILISANT SIGMA, UN VECT COLONNE EST IMPRIME * SUR UNE LIGNE, CE QUI SIGNIFIE QUE CETTE ECRITURE IMPRIME LA * MATRICE TRANSPOSEE DE LA MATRICE INITIALE. * SIGMA !PRINT ; SIGMA S[1]=[1] ; SIGMA !NOPRINT ; VE/DE S[1] * RETURN ************************************************************** MACRO TESTNB * DIFFERENCE ENTRE DU TEXTE (VARIABLE SANS CROCHETS) ET DES * NOMBRES (VARIABLE AVEC CROCHETS) * * 1) POUR UTILISER UN NOMBRE IL FAUT 2 CONDITIONS: * A) LE DEFINIR. EX: A=3.7 * B) METTRE DES CROCHETS AUTOUR QUAND L'UTILISE. EX: MESSAGE [A] *GOTO 1 A=3.7 ; MESSAGE [A] A=BONJOUR ; MESSAGE [A] 1: ***** * * 2) SI UNE DE CES 2 CONDITIONS N'EST PAS REMPLIE ON A DU TEXTE * AU LIEU D'UN NOMBRE GOTO 2 * A) OUBLI DE LA DEFINITION MESSAGE [A] MESSAGE *** * * B) OUBLI DES CROCHETS A=3.7 ; MESSAGE A A=BONJOUR ; MESSAGE A MESSAGE *** * * C) CROCHETS MAL FAITS A=3.7 ; MESSAGE [A[ A=BONJOUR ; MESSAGE ]A] 2: ***** * * 3) ILLUSTRATION PLUS SPECTACULAIRE AVEC UNE BOUCLE DO GOTO 3 DO I=1,10 ; MESSAGE I ; ENDDO MESSAGE **** DO I=1,10 ; MESSAGE [I] ; ENDDO * * NOTEZ QU'ON PEUT REMPLACER LA VARIABLE I PAR N'IMPORTE QUEL AUTRE NOM MESSAGE **** DO ALPHONSE=1,10 ; MESSAGE [ALPHONSE] ; ENDDO 3: ****** * * 4) UNE CAUSE FREQUENTE D'ERREUR: ON OUBLIE OU ON FAIT MAL LES CROCHETS * POURQUOI Y A-T-IL UN MESSAGE D'ERREUR? * CORRIGEZ AFIN QU'IL N'Y AIT PLUS DE MESSAGE D'ERREUR GOTO 4A N=2 ; MESSAGE [N] [N[ DO I=1,N ; MESSAGE [I] ; ENDDO 4A: * GOTO 4B N=2 ; DO J=1,[N[ ; MESSAGE [J] ; ENDDO 4B: ***** * 5) SI ON REDEFINIT UNE VARIABLE ELLE REMPLACE LA PRECEDENTE GOTO 5 A=3.7 ; A=10.4 ; MESSAGE [A] A=2.5 ; A=2*[A] ; MESSAGE [A] A=2.5 ; B=1 ; A=[A]+[B] ; MESSAGE [A] A=BONJOUR ; A= AU REVOIR ; MESSAGE [A] * * EXERCICE: QUE VA DONNER: A=2.3 ; B=bonjour ; C=[A]+[B] ; MESSAGE [C]? 5: ***** * * 6) ON PEUT ``ACCOLER'' DES VARIABLES GRACE A DES CROCHETS REPETES GOTO 6 A1=100 ; A2=200 ; A3=300 ; A4=400 DO I=1,4 ; MESSAGE AI A[I] [A[I]] ; ENDDO * EXERCICE: * QUE VONT DONNER LES LIGNES SUIVANTES? * V1V=3.6 ; V2V=4.2 ; DO I=1,2 ; MESSAGE VIV [V[I]V] ; ENDDO * V1V=3.6 ; V2V=4.2 ; DO I=1,2 ; MESSAGE [V[I]V] ; ENDDO * DO I=1,4 ; A=A[I] ; MESSAGE [A] ; ENDDO * A=10 ; DO I=1,4 ; A=[A]B ; MESSAGE [A] ; ENDDO * QUE SE PASSE-T-IL SI ON EXECUTE LA DERNIERE LIGNE SANS LE A=10? 6: ****** * 7) SI ON VEUT FAIRE UNE OPERATION INCLUANT DES OPERATIONS * PLUS COMPLIQUEES QUE ADDITION, MULTIPLICATION, DIVISION. * IL FAUT UTLISER L'OPERATEUR $SIGMA(.) GOTO 7 A=1.1 ; B=2.1 ; C=3.1 ; D=4.1 E=[A]+[B]+[C]+[D] ; MESSAGE E=[E] E=[A]**2 ; MESSAGE E=[E] E=$SIGMA([A]**2) ; MESSAGE E=[E] 7: RETURN **************************************************** MACRO TESTVEC * DIFFERENT TESTS SUR LA DEFINITION ET L'UTILISATION DE VECTEURS. * * 1) UN VECTEUR EST UN OBJET BEAUCOUP PLUS ``VISIBLE'' ET * ``PERMANENT'' QU'UN NOMBRE. * * ``VISIBLE'' DANS LE SENS QU'UNE FOIS QUE VOUS L'AVEZ CREE QUELQUE PART * VOUS POURREZ L'UTILISER DANS N'IMPORTE QUELLE MACRO * * ``PERMANENT'' DANS LE SENS OU * SI VOUS ESSAYEZ DE LE DEFINIR UNE SECONDE FOIS AVEC LE MEME NOM * PAW VA PROTESTER, * DE PLUS, SI VOUS NE METTEZ PAS DE VE/DE * A LA FIN IL SERA TOUJOURS * PRESENT MEME SI VOUS RE-EXECUTEZ LA MACRO UNE SECONDE FOIS *GOTO 1A VE/CR V(3) R 1 10 100 VE/CR V(3) R 0.1 0.2 0.3 VE/DE * 1A: **** * A EXECUTER DEUX FOIS DE SUITE GOTO 1B VE/CR V(3) R 1 10 100 1B: * * 2) UN VECTEUR PEUT DE DEFINIR DE 2 FACONS: VE/CR OU SIGMA * ICI ON REGARDE VE/CR * POUR VERIFIER CE QUE CONTIENT UN VECTEUR IL Y A 2 MOYENS: * A) FAIRE UNE BOUCLE * B) UTILISER LA MACRO ``SPRINT'' N=3 GOTO 2A VE/CR V([N]) R 1 10 100 DO J=1,[N] ; A=V([J]) ; MESSAGE [V([J])] [A] ; ENDDO 2A: * * UTLISATION DE SPRINT -> NCO=Number of COponents= NOMBRE DE COMPOSANTES GOTO 2B EXEC ANIM2#SPRINT V 2B: **** * 3) CREATION D'UN VECTEUR PAR SIGMA N=3 GOTO 3A SIGMA V1=ARRAY([N],1#[N]) ; EXEC ANIM2#SPRINT V1 3A: * * ON PEUT CHOISIR LE NOM D'UN VECTEUR A SON GRE A CONDITION * QU'IL N'AIT PAS PLUS QUE 6 LETTRES GOTO 3B SIGMA JEAN=ARRAY([N],0#1) ; EXEC ANIM2#SPRINT JEAN *SIGMA CHARLES=ARRAY([N],0#1) ; EXEC ANIM2#SPRINT CHARLES SIGMA CHARLE=ARRAY([N],0#1) ; EXEC ANIM2#SPRINT CHARLE 3B: * * 4) OPERATION SUR LES VECTEURS GOTO 4 N=3 SIGMA V1=ARRAY([N],1#[N]) ; EXEC ANIM2#SPRINT V1 SIGMA JEAN=ARRAY([N],0#1) ; EXEC ANIM2#SPRINT JEAN MESSAGE ***** SIGMA A=V1+JEAN ; EXEC ANIM2#SPRINT A MESSAGE ***** SIGMA P=V1*JEAN ; EXEC ANIM2#SPRINT P VE/DE * 4: **** * 5) ECRITURE ET LECTURE DE VECTEURS SUR UN FICHIER * A) ECRITURE D'UN VECTEUR N=10 * GOTO 5A N=10 ; SIGMA V1=ARRAY([N],1#[N]) EXEC ANIM2#SPRINT V1 FN=test1 ; FMT=F10.3 ; VE/WRITE V1 [FN] [FMT] * APRES AVOIR EXECUTE, OUVREZ LE FICHIER test1 ET VERIFIER QU'IL * CONTIENT BIEN LES BONNES VALEURS. * PUIS CHANGEZ LE FORMAT ET VOYEZ COMMENT LE FICHIER EST MODIFIE 5A: ** * B) ECRITURE DE DEUX VECTEURS GOTO 5B SIGMA V2=2*V1 FN=test2 ; FMT=2(F10.3) ; VE/WRITE V1,V2 [FN] [FMT] 5B: ** * C) LECTURE D'UN VECTEUR * C'EST PLUS DELICAT QUE L'ECRITURE POUR 2 RAISONS: * IL FAUT D'ABORD DEFINIR LE VECTEUR QU'ON VA LIRE * IL FAUT QUE LE FORMAT DANS LEQUEL * VOUS LE LISEZ CORRESPONDE A LA DISPOSITION REELLE DES CHIFFRES * DANS LE FICHIER GOTO 5C VE/CR W([N]) R FN=test1 ; FMT=F10.3 ; VE/READ W [FN] [FMT] EXEC ANIM2#SPRINT W 5C: ** * D) QUE SE PASSE-T-IL SI ON NE DEFINIT PAS LE VECTEUR AUPARAVANT GOTO 5D FN=test1 ; FMT=F10.3 ; VE/READ H [FN] [FMT] 5D: * RETURN ******************************************************* MACRO TESTMACRO * DIFFERENTS TESTS RELATIFS A L'UTILISATION DE MACROS * * 1) TAPEZ: EXEC ANIM2#SALUT Bonjour DANS LA LIGNE DE COMMANDE * PUIS TAPEZ: EXEC ANIM2#SALUT Salut * PUIS REGARDEZ COMMENT FONCTIONNE LA MACRO ANIM2#SALUT * **** * 2) TRANSMISSION D'UN ARGUMENT VECTORIEL A UNE MACRO *GOTO 2 N=4 ; VE/CR H([N]) R 1.1 2.2 3.3 4.4 EXEC ANIM2#ECRIV H * * REMARQUE: VOUS POUVEZ VOUS DEMANDER QUEL EST L'INTERET DE * TRANSMETTRE UN VECTEUR A UNE MACRO ETANT DONNE QUE * TOUT VECTEUR, UNE FOIS QU'IL EST CREE, PEUT ETRE UTILISE DANS * N'IMPORTE QUELLE MACRO. * C'EST UNE QUESTION DE NOM DU VECTEUR. * ICI J'AI CREE UN VECTEUR QUI S'APPELLE H. IL FAUDRAIT * DONC QUE LE NOM UTLISE DANS ANIM2#ECRIV SOIT AUSSI H. * AUTREMENT DIT, ON NE POURRAIT UTILISER CETTE MACRO QUE POUR * DES VECTEURS QUI S'APPELLENT H. CE SERAIT UNE SEVERE LIMITATION. * VE/DE * 2: ***** * 3) LA MACRO FABRIQUE UN VECTEUR QUE VOUS RECUPEREZ * PAR EX LA MACRO ANIM2#TROIS REMPLACE TOUTES LES COMPOSANTES DU * VECTEUR D'ENTREE PAR DES 3 GOTO 3 N=4 ; VE/CR H([N]) R 1.1 2.2 3.3 4.4 EXEC ANIM2#ECRIV H EXEC ANIM2#TROIS H EXEC ANIM2#ECRIV H 3: * VE/DE * RETURN ***************************************************** MACRO SALUT * usage EXEC ANIM2#SALUT TX -> repond ``Comment allez-vous?'' * CETTE MACRO REPOND Comment allez-vous? LORSQU'ON LUI * DIT Bonjour. * LORSQU'ON LUI DIT AUTRE CHOSE, ELLE REPOND: * Pardon, que dites-vous? TX=[1] T1=Bonjour * IF [TX]=[T1] THEN MESSAGE ; MESSAGE Comment allez-vous? ; MESSAGE ENDIF * IF [TX]<>[T1] THEN MESSAGE ; MESSAGE Pardon, que dites-vous? ; MESSAGE ENDIF * RETURN ***************************************************** MACRO SALUTG * usage EXEC ANIM2#SALUTG [TX] -> repond ``Comment allez-vous?'' * CETTE MACRO REPOND ``Comment allez-vous?'' LORSQU'ON LUI * DIT ``Bonjour'' OU BIEN ''BONJOUR'' OU BIEN ``bonjour'' OU * BIEN ``BonjouR'' OU BIEN TOUTE AUTRE COMBINAISON DE MAJUSCULES * ET DE MINUSCULES * LORSQU'ON LUI DIT AUTRE CHOSE, ELLE REPOND: * Pardon, que dites-vous? TX=[1] * * LA FONCTION $UPPER(.) TRANSFORME TOUTE CHAINE DE * CARACTERES EN MAJUSCULES (``UPPER CASE'') TXU=$UPPER([TX]) ; TX=[TXU] * T1=BONJOUR * IF [TX]=[T1] THEN MESSAGE ; MESSAGE Comment allez-vous? ; MESSAGE ENDIF * IF [TX]<>[T1] THEN MESSAGE ; MESSAGE Pardon, que dites-vous? ; MESSAGE ENDIF * RETURN ****************************************************** MACRO ECRIV * usage: EXEC ANIM2#ECRIV W -> ecrit en colonne les compos. du vect W * N=$SIGMA(NCO([1])) MESSAGE ; MESSAGE Composantes du vecteur [1]: N=[N] * DO I=1,[N] ; A=[1]([I]) ; MESSAGE [A] ; ENDDO MESSAGE * RETURN ****************************************************** MACRO TROIS * usage: EXEC ANIM2#TROIS V -> remplace les composantes de V par 3 * * LA NOTATION 10*3 DIT QU'IL FAUT REPETER 10 FOIS LE 3 N=$SIGMA(NCO([1])) ; VE/DE [1] ; VE/CR [1]([N]) R [N]*3 * RETURN ****************************************************** MACRO PHOTO * COMMENT FAIRE APPARAITRE UNE PHOTO SUR LA FENETRE GRAPHIQUE? * IGSET * ; SET * ; OPTION * * OPTION ZFL1 * OPTION NBOX Q=10 ; X1=0 ; X2=[Q] ; Y1=0 ; Y2=[Q] ; NULL [X1] [X2] [Y1] [Y2] AB * * CHARGEMENT DE FANTO XP=5 ; YP=9 ; PICTURE/LOAD [XP] [YP] fanto1b.gif * BANDE BLEUE EN HAUT DE L'IMAGE XA=0 ; YA=8.5 ; XB=10 ; YB=10 IGSET FAIS 1 ; IGSET FACI 4 ; BOX [XA] [XB] [YA] [YB] * * FOND JAUNE POUR MATHIEU XA=0 ; YA=0 ; XB=5 ; YB=8.5 ; IGSET FACI 5 ; BOX [XA] [XB] [YA] [YB] * * TEXTE IGSET TXFP -30 ; IGSET CHHE 0.5 ; IGSET TXCI 0 XP=1 ; YP=9.6 TX=Nous nous presentons, Mathieu et Fanto ; ITX [XP] [YP] [TX] YP=9.1 TX=Nous sommes vos deux guides pour la visite ; ITX [XP] [YP] [TX] YP=8.6 ; TX=Suivez-nous! ; ITX [XP] [YP] [TX] * * MATHIEU X1=-3 ; X2=7 ; Y1=-5 ; Y2=5 ; NULL [X1] [X2] [Y1] [Y2] SAB MG=45 ; MD=[MG] ; PG=0 ; PD=0 ; H=1 ; K=0.3 EXEC ANIM2#MATHIEU [MG] [MD] [PG] [PD] [H] [K] * * CREATION DU FICHIER gif PICT/PRINT pict00.gif * PICT/DE * RETURN