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