Télécharger zigzag.procedur

Retour à la liste

Numérotation des lignes :

  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 - Tous droits réservés.
Mentions légales