$$$$ POSTOU * POSTOU PROCEDUR LJ1 14/11/26 21:15:05 8301 DEBPROC POSTOU TAB1*TABLE DIST/FLOTTANT; **** brafis ************************** x11 = tab1.zgi.x . 1; x12 = tab1.zgi.x . 2; z11 = tab1.zgi.z . 1; z12 = tab1.zgi.z . 2; kk1 = (x12 - x11)/(z12 - z11); * x21 = tab1.zgf.x . 1; x22 = tab1.zgf.x . 2; z21 = tab1.zgf.z . 1; z22 = tab1.zgf.z . 2; kk2 = (x22 - x21)/(z22 - z21); * ** reperer les points dans la zone * i = 1; tabx = table; tabz = table; tabo = table; repeter bou1 (dime tab1.pfx); tabx.i = prog; tabz.i = prog; tabo.i = prog; logg = '>' (dime tab1.pfx.i) 0; si logg; zz = tab1.pfz.i . 1; x1 = (kk1 * (zz - z11)) + x11; x2 = (kk2 * (zz - z21)) + x21; j = 1;k = 1; repeter bou2 (dime tab1.pfx.i); xx = tab1.pfx.i . j; si tab1.droi; log1 = ('<' xx x2) et ('>' xx x1); sinon; log1 = ('>' xx x2) et ('<' xx x1); fins; si log1; tabx.i = inser tabx.i k xx; tabz.i = inser tabz.i k zz; tabo.i = inser tabo.i k (tab1.pfo.i . j); k = k + 1; fins; j = j + 1; fin bou2; fins; i = i + 1; fin bou1; * ** reperer les points avec l'ouverture maximale * i = 1; k = 0; tabxx = table; tabzz = table; tabii = table; taboo = table; repeter bou1 (dime tabx); si ('NEG' (dime tabx.i) 0); j = 1; k = k + 1; aa = maxi tabo.i; repeter bou2 (dime tabx.i); si('EGA' (aa - (extr tabo.i j)) 0.); tabxx.k = extr tabx.i j; tabzz.k = extr tabz.i j; tabii.k = i; taboo.k = aa; fins; j = j + 1; fin bou2; fins; i = i + 1; fin bou1; * ** lisser le chemin * i = 2;j = 1; lisx = prog;lisz = prog; lisi = prog;liso = prog; repeter bou1 ((dime tabxx) - 1); dd = tabxx.i - tabxx.(i - 1); *list dd; si ('<' dd 0.); *list tabxx.(i - 1); lisx = inser lisx j tabxx.(i - 1); lisz = inser lisz j tabzz.(i - 1); lisi = inser lisi j tabii.(i - 1); liso = inser liso j taboo.(i - 1); j = j + 1; fins; i = i + 1; fin bou1; lisx = inser lisx j tabxx.(i - 1); lisz = inser lisz j tabzz.(i - 1); lisi = inser lisi j tabii.(i - 1); liso = inser liso j taboo.(i - 1); * ** lisser le chemin pas-encore-lissé * i = 2;j = 1; lisxx = prog; liszz = prog;lisoo = prog; lisii = prog; repeter bou1 ((dime lisx) - 1); d = (extr lisx i) - (extr lisx (i - 1)); si ('<' d 0.); lisxx = inser lisxx j (extr lisx (i - 1)); liszz = inser liszz j (extr lisz (i - 1)); lisii = inser lisii j (extr lisi (i - 1)); lisoo = inser lisoo j (extr liso (i - 1)); j = j + 1; fins; i = i + 1; fin bou1; lisxx = inser lisxx j (extr lisx (i - 1)); liszz = inser liszz j (extr lisz (i - 1)); lisii = inser lisii j (extr lisi (i - 1)); lisoo = inser lisoo j (extr liso (i - 1)); * ** lisser encore plus * i = 2;j = 1; lisxxx = prog; liszzz = prog; lisooo = prog; lisiii = prog; repeter bou1 ((dime lisxx) - 1); d = (extr lisxx i) - (extr lisxx (i - 1)); si ('<' d 0.); lisxxx = inser lisxxx j (extr lisxx (i - 1)); liszzz = inser liszzz j (extr liszz (i - 1)); lisiii = inser lisiii j (extr lisii (i - 1)); lisooo = inser lisooo j (extr lisoo (i - 1)); j = j + 1; fins; i = i + 1; fin bou1; lisxxx = inser lisxxx j (extr lisxx (i - 1)); liszzz = inser liszzz j (extr liszz (i - 1)); lisiii = inser lisiii j (extr lisii (i - 1)); lisooo = inser lisooo j (extr lisoo (i - 1)); * tab1.che = table; tab1.che.x = lisxxx; tab1.che.z = liszzz; tab1.che.n = lisiii; tab1.che.o = lisooo; **** dirfis ************************** lisx = tab1.che.x; lisz = tab1.che.z; i = 3; tabnorm = table; tabnorm.x = table; tabnorm.z = table; tabdirn = table; repeter bou1 ((dime lisx) - 2); xx = extr lisx (i - 1); zz = extr lisz (i - 1); vx1 = (extr lisx i) - (extr lisx (i - 1)); vx2 = (extr lisx (i - 2)) - (extr lisx (i - 1)); vz1 = (extr lisz i) - (extr lisz (i - 1)); vz2 = (extr lisz (i - 2)) - (extr lisz (i - 1)); vv1 = ((vx1 * vx1) + (vz1 * vz1))**(0.5); si ('EGA' vv1 0.); vv1 = 1.; fins; vx1 = vx1/vv1; vz1 = vz1/vv1; * vv2 = ((vx2 * vx2) + (vz2 * vz2))**(0.5); si ('EGA' vv2 0.); vv2 = 1.; fins; vx2 = vx2/vv2; vz2 = vz2/vv2; * vxn = vx1 + vx2; vzn = vz1 + vz2; si ('>' (abs vxn) 1.e-9); kn = vzn/vxn; sinon; vxn = (-1) * vz1; vzn = vx1; * kn = vzn/vxn; fins; vvn = ((vxn**2) + (vzn**2))**(0.5); si ('EGA' vvn 0.); vvn = 1.; fins; vxn1 = vxn/vvn; vzn1 = vzn/vvn; * kk = (1 + (kn**2))**(0.5); xn1 = xx + (dist/kk); xn2 = xx - (dist/kk); * zn1 = (kn * (xn1 - xx)) + zz; zn2 = (kn * (xn2 - xx)) + zz; * tabdirn . (i - 2) = table; tabdirn . (i - 2) . 1 = vxn1; tabdirn . (i - 2) . 2 = vzn1; * tabnorm . x . i = table; tabnorm . z . i = table; tabnorm.x . i . 1 = xn1; tabnorm.x . i . 2 = xn2; tabnorm.z . i . 1 = zn1; tabnorm.z . i . 2 = zn2; i = i + 1; fin bou1; * tab1.normm = tabnorm; tab1.dirnn = tabdirn; **** ouvsfi ************************** * tain = tab1.critt ; plan = tab1.pla; * opti elem seg2; * ** créer la ligne d'influence * ih = 3;tabcx = table;taboo = table;tabot = table; tabpl = table;tabpl.ppi = table;tabpl.ppf = table; repeter bouih (dime tab1.normm.x); xx1 = tab1.normm.x.ih . 1; xx2 = tab1.normm.x.ih . 2; zz1 = tab1.normm.z.ih . 1; zz2 = tab1.normm.z.ih . 2; vx1 = xx2 - xx1; vz1 = zz2 - zz1; vv1 = ((vx1**2) + (vz1**2))**(0.5); si ('EGA' vv1 0.); vv1 = 1.; fins; vx1 = vx1/vv1; vz1 = vz1/vv1; * si ('EGA' plan 'ZX'); yy = coor 2 tab1.poi ; p1 = xx1 yy zz1; p2 = xx2 yy zz2; fins; * si ('EGA' plan 'XY'); yy = coor 3 tab1.poi; p1 = xx1 zz1 yy; p2 = xx2 zz2 yy; fins; * tabpl.ppi.(ih - 2) = p1; tabpl.ppf.(ih - 2) = p2; * l1 = droit p1 p2 dini (tain * tab1.telx) dfin (tain * tab1.telx); dep1 = chan cham tab1.deplacements.(tab1.pas) tab1.geo; dep2 = proi l1 dep1; l2 = chan poi1 l1; nl = nbel l2; * i = 2;lisx = prog; liso = prog;lisot = prog; repeter bou1 (nl - 1); poil1 = l2 poin (i - 1); depx1 = extr dep2 ux poil1; depz1 = extr dep2 uz poil1; poil2 = l2 poin i; depx2 = extr dep2 ux poil2; depz2 = extr dep2 uz poil2; sdepx = depx2 - depx1; sdepz = depz2 - depz1; ouvnn = (sdepx * vx1) + (sdepz * vz1); ouvnn = abs ouvnn; ouvtt = (sdepx * vz1) - (sdepz * vx1); ouvtt = abs ouvtt; lisx = inser lisx &bou1 i; liso = inser liso &bou1 ouvnn; lisot = inser lisot &bou1 ouvtt; i = i + 1; fin bou1; tabcx.(ih - 2) = lisx; taboo.(ih - 2) = liso; tabot.(ih - 2) = lisot; ih = ih + 1; fin bouih; * tab1.ouvnx = tabcx; tab1.ouvno = taboo; tab1.ouvto = tabot; **** ouvfin *********************** tabx = tab1.che.x; tabz = tab1.che.z; tabo = tab1.ouvno; tabot = tab1.ouvto; i = 1;lisno = prog;lisii = prog;listo = prog; repeter bou1 (dime tabo); j = 1;oo = 0.; repeter bou2 (dime tabo.i); oo = oo + (extr tabo.i j); j = j + 1; fin bou2; ot = maxi tabot.i; lisno = inser lisno &bou1 oo; listo = inser listo &bou1 ot; i = i + 1; fin bou1; * ** * i = 1;lisnx = prog; lisnz = prog; repeter bou1 (dime lisno); lisnx = inser lisnx i (extr tabx i); lisnz = inser lisnz i (extr tabz i); i = i + 1; fin bou1; tab1.fisnx = lisnx; tab1.fisnz = lisnz; tab1.fisno = lisno; tab1.fisto = listo; FINPROC;