Download zigzag.procedur

Back to the list

   1 : * ZIGZAG    PROCEDUR  JEANV     96/12/03    21:16:42     2411           
   2 : 'DEBP' ZIGZAG;
   3 :   IN1 = FAUX; IDEINI = FAUX; IDEFIN = FAUX;
   4 :   IDIM3 = (VALE DIME) 'EGA' 3;
   5 :   ARGU N1/'ENTIER' POIN0*'POINT' V1*'POINT' V2*'POINT';
   6 :   V1 = V1 / (NORM V1);
   7 :   V2 = V2 / (NORM V2);
   8 :   SI IDIM3;
   9 :     NOR = V1 PVEC V2;
  10 :     V2 = V1 TOUR 90. (0. 0. 0.) NOR;
  11 :   SINON;
  12 :     NOR = SIGN (((COOR 1 V1)*(COOR 2 V2))-((COOR 1 V2)*(COOR 2 V1)));
  13 :     V2 = V1 TOUR 90. (0. 0.);
  14 :   FINSI;
  15 :   TACT = TABLE;
  16 :   PI180 = PI / 180.;
  17 :   SI (EXISTE N1);
  18 :     IN1 = VRAI;
  19 :   FINSI;
  20 : * ---------------------------------------------- Lecture des arguments
  21 :   I=0; LGTOT = 0.; LG = PROG;
  22 :   TACT.I = TABLE;
  23 :   TACT.I.'SC' = 0.;
  24 :   REPETER B1;
  25 :     ARGU M1/'MOT' M2/'FLOTTANT';
  26 :     SI ((EXISTE M1) ET (EXISTE M2));
  27 :       SI (('EGA' (TYPE M1) 'MOT     ')
  28 :        ET ('EGA' (TYPE M2) 'FLOTTANT'));
  29 :         SI (('NEG' M1 'DINI') ET ('NEG' M1 'DFIN') ET ('NEG' M1 'D')
  30 :          ET ('NEG' M1 'S') ET ('NEG' M1 'R') ET ('NEG' M1 'A'));
  31 :           MESS 'ERREUR : On ne comprend pas le mot ' M1;
  32 :           QUITTER ZIGZAG;
  33 :         FINSI;
  34 :         SI ('EGA' M1 'DINI');
  35 :           IDEINI = VRAI;
  36 :           DEINI = M2;
  37 :         FINSI;
  38 :         SI ('EGA' M1 'DFIN');
  39 :           IDEFIN = VRAI;
  40 :           DEFIN = M2;
  41 :         FINSI;
  42 : * -------------------------------------------------- Partie rectiligne
  43 :         SI ('EGA' M1 'D');
  44 :           I=I+1;
  45 :           M2 = ABS M2;
  46 :           TACT.I = TABLE;
  47 :           TACT.I.'MOT' = 'ZDROI';
  48 :           TACT.I.'L'   = M2;
  49 :           LG = LG ET (PROG M2);
  50 :           LGTOT = LGTOT + M2;
  51 :           TACT.I.'SC' = LGTOT;
  52 :         FINSI;
  53 : * ------------------------------------------------ Partie courbe : S,R
  54 :         SI ('EGA' M1 'S');
  55 :           ARGU M3*'MOT' M4*'FLOTTANT';
  56 :           SI ('EGA' M3 'R');
  57 :             I=I+1;
  58 :             M4 = ABS M4;
  59 :             TACT.I = TABLE;
  60 :             TACT.I.'MOT' = 'ZCOUR';
  61 :             TACT.I.'ANGLE' = (M2 / M4) / PI180;  
  62 :             TACT.I.'RAYON' = M4;
  63 :             LG = LG ET (PROG (ABS M2));
  64 :             LGTOT = LGTOT + (ABS M2);
  65 :             TACT.I.'SC' = LGTOT;
  66 :             SI ((ABS (TACT.I.'ANGLE')) > 179.999);
  67 :               MESS 'ERREUR : Angle superieur ou egal a 180 degres';
  68 :               QUITTER ZIGZAG;
  69 :             FINSI;
  70 :           SINON;
  71 :             MESS 'ERREUR : S FLOT1 doit etre accompagne de R FLOT2';
  72 :             QUITTER ZIGZAG;
  73 :           FINSI;
  74 :         FINSI;
  75 : * ------------------------------------------------ Partie courbe : A,R
  76 :         SI ('EGA' M1 'A');
  77 :           ARGU M3*'MOT' M4*'FLOTTANT';
  78 :           SI ('EGA' M3 'R');
  79 :             I=I+1;
  80 :             M4 = ABS M4;
  81 :             TACT.I = TABLE;
  82 :             TACT.I.'MOT' = 'ZCOUR';
  83 :             TACT.I.'ANGLE' = M2;  
  84 :             TACT.I.'RAYON' = M4;
  85 :             LG = LG ET (PROG ((ABS M2)*PI180*M4));
  86 :             LGTOT = LGTOT + ((ABS M2)*PI180*M4);
  87 :             TACT.I.'SC' = LGTOT;
  88 :             SI ((ABS (TACT.I.'ANGLE')) > 179.999);
  89 :               MESS 'ERREUR : Angle superieur ou egal a 180 degres';
  90 :               QUITTER ZIGZAG;
  91 :             FINSI;
  92 :           SINON;
  93 :              MESS 'ERREUR : A FLOT1 doit etre accompagne de R FLOT2';
  94 :             QUITTER ZIGZAG;
  95 :           FINSI;
  96 :         FINSI;
  97 : * ----------------------------------------- Partie courbe : S,R ou A,R
  98 :         SI ('EGA' M1 'R');
  99 :           ARGU M3/'MOT' M4/'FLOTTANT';
 100 :           SI ('EGA' M3 'S');
 101 :             I=I+1;
 102 :             M2 = ABS M2;
 103 :             TACT.I = TABLE;
 104 :             TACT.I.'MOT' = 'ZCOUR';
 105 :             TACT.I.'ANGLE' = (M4 / M2) / PI180;  
 106 :             TACT.I.'RAYON' = M2;
 107 :             LG = LG ET (PROG (ABS M4));
 108 :             LGTOT = LGTOT + (ABS M4);
 109 :             TACT.I.'SC' = LGTOT;
 110 :             SI ((ABS (TACT.I.'ANGLE')) > 179.999);
 111 :               MESS 'ERREUR : Angle superieur ou egal a 180 degres';
 112 :               QUITTER ZIGZAG;
 113 :             FINSI;
 114 :           SINON;
 115 :             SI ('EGA' M3 'A');
 116 :               I=I+1;
 117 :               M2 = ABS M2;
 118 :               TACT.I = TABLE;
 119 :               TACT.I.'MOT' = 'ZCOUR';
 120 :               TACT.I.'ANGLE' = M4;  
 121 :               TACT.I.'RAYON' = M2;
 122 :               LG = LG ET (PROG ((ABS M4)*PI180*M2));
 123 :               LGTOT = LGTOT + ((ABS M4)*PI180*M2);
 124 :               TACT.I.'SC' = LGTOT;
 125 :               SI ((ABS (TACT.I.'ANGLE')) > 179.999);
 126 :                 MESS 'ERREUR : Angle superieur ou egal a 180 degres';
 127 :                 QUITTER ZIGZAG;
 128 :               FINSI;
 129 :             SINON;
 130 :    MESS 'ERREUR : R FLOT1 doit etre accompagne de S FLOT2 ou A FLOT2';
 131 :               QUITTER ZIGZAG;
 132 :             FINSI;
 133 :           FINSI;
 134 :         FINSI;        
 135 :       FINSI;
 136 :     SINON;
 137 :       QUITTER B1;
 138 :     FINSI;
 139 :   FIN B1;
 140 :   SI (I < 1); QUITTER ZIGZAG; FINSI;
 141 :   SI ((NON IN1) ET (NON IDEINI) ET (NON IDEFIN));
 142 :     MESS 'ERREUR : Il faut specifier N1 ou (DINI,DFIN).';
 143 :     QUITTER ZIGZAG;
 144 :   FINSI;
 145 :   SI (IDEINI ET (NON IDEFIN));
 146 :     IDEFIN = VRAI;
 147 :     DEFIN = DEINI;
 148 :   FINSI;
 149 :   SI ((NON IDEINI) ET IDEFIN);
 150 :     IDEINI = VRAI;
 151 :     DEINI = DEFIN;
 152 :   FINSI;
 153 : * -------------------------- Choix arbitraire entre N1 et (DINI, DFIN)
 154 :   SI (IN1 et IDEINI);
 155 :     IDEINI = FAUX; IDEFIN = FAUX;
 156 :   FINSI;
 157 : * ------------------------------------------- Repartition des elements
 158 :   SI IN1;
 159 :     SI (N1 < I);
 160 :       MESS 'ERREUR : Il faut au moins autant d elements que de lignes'
 161 :            ' elementaires.';
 162 :       QUITTER ZIGZAG;
 163 :     FINSI;
 164 :     D0 = (TACT.I.'SC') / N1;
 165 :     DF = D0;
 166 :   SINON;
 167 :     D0 = DEINI;
 168 :     DF = DEFIN;
 169 :   FINSI;
 170 :   PTE = (DF - D0) / TACT.I.'SC';
 171 : 
 172 : * ---------------------------------------- Creation du maillage ZIGZAG
 173 :   PC = POIN0;
 174 :   REPETER B2 I;
 175 :     SI ('EGA' (TACT.&B2.'MOT') 'ZDROI');
 176 :       PN = PC 'PLUS' ((TACT.&B2.'L')*V1);
 177 :       LIGN = DROIT PC PN 'DINI' (D0+(PTE*TACT.(&B2 - 1).'SC'))
 178 :                          'DFIN' (D0+(PTE*TACT.&B2.'SC'));
 179 :       PC = PN;
 180 :       TACT.&B2.'PF' = PN;
 181 :     FINSI;
 182 :     SI ('EGA' (TACT.&B2.'MOT') 'ZCOUR');
 183 :       SI IDIM3;
 184 : PO = PC 'PLUS' ((SIGN (TACT.&B2.'ANGLE'))*V2*(TACT.&B2.'RAYON'));
 185 :         PN = PC TOUR (TACT.&B2.'ANGLE') PO (PO 'PLUS' NOR);
 186 :         V1 = V1 TOUR (TACT.&B2.'ANGLE') (0. 0. 0.) NOR;
 187 :         V2 = V2 TOUR (TACT.&B2.'ANGLE') (0. 0. 0.) NOR;
 188 :       SINON;
 189 : PO = PC 'PLUS' ((SIGN (TACT.&B2.'ANGLE'))*NOR*V2*(TACT.&B2.'RAYON'));
 190 :         PN = PC TOUR ((TACT.&B2.'ANGLE')*NOR) PO;
 191 :         V1 = V1 TOUR ((TACT.&B2.'ANGLE')*NOR) (0. 0.);
 192 :         V2 = V2 TOUR ((TACT.&B2.'ANGLE')*NOR) (0. 0.);
 193 :       FINSI;
 194 :       LIGN = CERC PC PO PN 'DINI' (D0+(PTE*TACT.(&B2 - 1).'SC'))
 195 :                            'DFIN' (D0+(PTE*TACT.&B2.'SC'));
 196 :       PC = PN;
 197 :       TACT.&B2.'PF' = PN;
 198 :     FINSI;
 199 :     SI ('EGA' &B2 1);
 200 :       GEO1 = LIGN;
 201 :     SINON;
 202 :       GEO1 = GEO1 ET LIGN;
 203 :     FINSI;
 204 :   FIN B2;
 205 : 'FINP' GEO1;
 206 : * --------------------------------------------------------------------
 207 :  

© Cast3M 2003 - All rights reserved.
Disclaimer