Download test_intgeo.dgibi

Back to the list

****************************************************
*  TEST_INTGEO.DGIBI
*  teste l'option GEOM de l'operateurINTE
*  creation : Benoit PRABEL, 12/09/2012
*  modifs : ...
****************************************************

****** OPTIONS GENERALES ET PARAMETRES **********

opti dime 3 elem tri3;
*   opti trac open ;
*  opti trac PSC ;
 opti trac 'PSC' 'EPTR' 5 'POTR' 'HELVETICA_16';
*  opti  impi 12;

*** qq points de vue ***
eyex = 1000. 0. 0.;
eyey = 0. -1000. 0.;
eyez = 0. 0. 1000.;
eye3d = 500. -800. 400.;

*** nberr = nombre d'erreurs détectées ***
nberr= 0;

****** CAS DE BASE 1 **********

TITR 'CAS DE BASE 1 : INCLUSION';

*construction de tri1
p1 = 0. 0. 0.;
p2 = 1. 0. 0.;
p3 = 0. 2. 0.;
tri1 = manu 'TRI3' p1 p2 p3 'VERT';  

*construction de tri2 avec plusieurs inclinaisons
p41 = -1. 1.  2.;
p51 =  3. 1.  2.;
p61 =  0. 1. -2.;
tri21 = manu 'TRI3' p41 p51 p61 'BLEU';  
p42 = -1. 0.  0.5;
p52 =  3. 0.  0.5;
p62 =  0. 3. -0.5;
tri22 = manu 'TRI3' p42 p52 p62 'BLEU'; 
p43 = -1. 2.  2.;
p53 =  3. 2.  2.;
p63 =  0. -2. -2.;
tri23 = manu 'TRI3' p43 p53 p63 'BLEU';  

trac eye3d (tri1 et tri21) ;
tri11b tri21b lig11 lig21 = INTE 'GEOM' tri1 tri21;
lig11 = lig11 coul 'ORAN';
list tri11b; list tri21b; list lig11; list lig21;

trac eye3d (tri11b et tri21b) ;
trac eye3d (tri11b et lig11) ;
trac eye3d (tri21b et lig21) ;

tri12b tri22b lig12 lig22 = INTE 'GEOM' tri1 tri22;
trac eye3d (tri12b) ;
trac eye3d (tri22b) ;
tri13b tri23b lig13 lig23 = INTE 'GEOM' tri1 tri23;
trac eye3d (tri13b) ;
trac eye3d (tri23b) ;

si ((nbel tri11b) neg 3); nberr=nberr+1; fins;
si ((nbel tri12b) neg 3); nberr=nberr+1; fins;
si ((nbel tri13b) neg 1); nberr=nberr+1; fins;
si ((nbel tri21b) neg 5); nberr=nberr+1; fins;
si ((nbel tri22b) neg 5); nberr=nberr+1; fins;
si ((nbel tri23b) neg 5); nberr=nberr+1; fins;
mess '1 : nberr=' nberr;

****** CAS DE BASE 2 **********

TITR 'CAS DE BASE 2 : INCLUSION INVERSE';

tri2c tri1c lig2c lig1c = INTE 'GEOM' tri21 tri1;
lig2c = lig2c coul 'ORAN';
trac eye3d (tri1c et tri2c et lig2c) ;


****** CAS DE BASE 3 **********

TITR 'CAS DE BASE 3 : chevauchement';

p7 =  0. 1.5  0.5;
p8 =  2. 1.5  0.5;
p9 =  1. 0. -0.5;
tri3 = manu 'TRI3' p7 p8 p9 'TURQ';  

trac eye3d (tri1 et tri3) ;
tri13 tri33 lig13 lig33= INTE 'GEOM' tri1 tri3;
* trac eyez (tri13 et tri33 et lig13) ;
* trac eyey (tri13 et tri33 et lig13) ;
trac eye3d (tri13 et lig13) ;
trac eye3d (tri33 et lig33) ;

si ((nbel tri13) neg 4); nberr=nberr+1; fins;
si ((nbel tri23) neg 1); nberr=nberr+1; fins;
mess '3 : nberr=' nberr;



******* CAS PLAN - PLAN ******

ntri1 = 20; ntri2 = 8;

TITR (chai 'CAS COMPLEXE 4 : PLAN - PLAN (n=' ntri1 ntri2 ')' );

*surface reglee 1 
nregl1 = ntri1 / 2;
dx1 = (10./nregl1);
DENS dx1;
pp1 = 0. 0. 0.;
pp2 = 0. 2. 0.;
vx1 = 10. 0. 0.;
d1 = pp1 droi 1 pp2;
d2 = d1 plus vx1;
s1 = d1 regl nregl1 d2 ;
s1 = s1 coul VERT;
s1cote4 = (s1 cote 4) CHAN poi1;

*surface reglee 2 
nregl2 = ntri2 / 2;
dx2 = 1.;
DENS dx1;
ppp1 = -1.5 1.  1.;
ppp2 =  0. 1. -1.;
vx2 = nregl2 * (1. 0. 0.);
dd1 = ppp1 droi 1 ppp2;
dd2 = dd1 plus vx2;
s2 = dd1 regl nregl2 dd2 ;
s2 = s2 coul BLEU;

trac (-700. -400. 330.) (s1 et s2) ;
s11 s22 lig11 lig22= INTE 'GEOM' s1 s2;
trac (-700. -400. 330.) (s11 et s22 et lig11 et lig22) ;
trac (-700. -400. 330.) (s11) ;
trac (-700. -400. 330.) (s22) ;

si ((nbel lig11) neg 13); nberr=nberr+1; fins;
si ((nbno lig11) neg 14); nberr=nberr+1; fins;
mess '4 : nberr=' nberr;


******* CAS PLAN - CYLINDRE ******

*cylindre 2 
nz = 1;
hz = 2.;
ray2 = 2.;
ncirc = 4;
pcen2 = 5. (1.5*ray2) (-0.5*hz);
pcyl1 = pcen2 moin (ray2 0. 0.);
pcyl2 = pcen2 moin (0. ray2 0.);
pcyl3 = pcen2 plus (ray2 0. 0.);
pcyl4 = pcen2 plus (0. ray2 0.);
cer2 = (cer3 ncirc pcyl1 pcyl2 pcyl3)
    et (cer3 ncirc pcyl3 pcyl4 pcyl1) ;
cyl2 = cer2 TRAN nz (0. 0. hz);

TITR 'CAS COMPLEXE 5 : PLAN - CYLINDRE (' nz ncirc ')';
trac (s1 et cyl2) 'CACH';

s111 cyl22 cer11 cer22 = INTE 'GEOM' s1 cyl2;
list cer11;
trac (s111 et cyl22) 'CACH';
trac (s111) 'CACH';
trac (cyl22) 'CACH';

nz = 2;
TITR 'CAS COMPLEXE 6 : PLAN - CYLINDRE (' nz ncirc ')';
cyl2 = cer2 TRAN nz (0. 0. hz);
trac (s1 et cyl2);
s111 cyl22 cer11 cer22 = INTE 'GEOM' s1 cyl2;
trac (s111 et cyl22) 'CACH';

ncirc = 6;
TITR 'CAS COMPLEXE 7 : PLAN - CYLINDRE (' nz ncirc ')';
pcen2 = 5. (1.5*ray2) (-0.5*hz);
pcyl1 = pcen2 moin (ray2 0. 0.);
pcyl2 = pcen2 moin (0. ray2 0.);
pcyl3 = pcen2 plus (ray2 0. 0.);
pcyl4 = pcen2 plus (0. ray2 0.);
cer2 = (cer3 ncirc pcyl1 pcyl2 pcyl3)
    et (cer3 ncirc pcyl3 pcyl4 pcyl1) ;
cyl2 = cer2 TRAN nz (0. 0. hz);
trac (s1 et cyl2) 'CACH';

s111 cyl22 cer11 cer22 = INTE 'GEOM' s1 cyl2;
trac (s111 et cyl22) 'CACH';

*recup d'une partie interieure seulement
s114 = elem s111 'APPUYE' 'LARGEMENT' s1cote4;
trac (s114) 'CACH';
s115 = s111 diff s114;

si ((nbel s114) neg 23); nberr=nberr+1; fins;
mess '7 : nberr=' nberr;


******* CAS PLAN - SPHERE ******

TITR 'CAS COMPLEXE 8 : SPHERE - PLAN';

nsph = 8;
nsph = 12;
nsph = 20;
Rsph = 0.6;
ps0z0 = 0.5 0.5 0.;

*carre
carr1 = 0.25*Rsph;
ncarr1 = nsph / 4 ;
ps1z0 = ps0z0 plus ((-1*carr1) (-1*carr1) 0.);
ps2z0 = ps0z0 plus (carr1 (-1*carr1) 0.);
ps3z0 = ps0z0 plus (carr1 carr1 0.);
ps4z0 = ps0z0 plus ((-1*carr1) carr1 0.);
lcarr12 = ps1z0 droi ncarr1 ps2z0;
lcarr43 = ps4z0 droi ncarr1 ps3z0;
scarr = regl ncarr1 lcarr12 lcarr43;
lcarr23 = scarr cote 2 ;
lcarr14 = scarr cote 4 ;

*cercle + raccord
Rs05 = Rsph / (2**0.5);
nc1 = nsph / 2 ;
ps5z0 = ps0z0 plus ((-1*Rs05) (-1*Rs05) 0.);
ps6z0 = ps0z0 plus (Rs05 (-1*Rs05) 0.);
ps7z0 = ps0z0 plus (Rs05 Rs05 0.);
ps8z0 = ps0z0 plus ((-1*Rs05) Rs05 0.);
c567 = cer3 nc1 ps5z0 ps6z0 ps7z0;
c785 = cer3 nc1 ps7z0 ps8z0 ps5z0;
sc567 = c567 regl nc1 (lcarr12 et lcarr23);
sc785 = c785 regl nc1 ((inve lcarr43) et lcarr14);

sz0 = scarr et sc567 et sc785;
elim sz0 1.E-8;

*on créé la sphere par translation
xz0 yz0 zz0 = coor sz0;
unz0 = manu 'CHPO' sz0 'SCAL' 1.;
rz02 = ((xz0-(0.5*unz0))**2) + ((yz0-(0.5*unz0))**2) ;
rz0 = rz02**0.5;
alphz0 = ASIN (rz0/Rsph) ;
depz0 = Rsph * (unz0 - (cos alphz0));
depz0 = (manu sz0 CHPO UX 0. UY 0.) + (depz0 NOMC 'UZ');
sphz0 = sz0 plus depz0;

psph0 = 0.5 0.5 Rsph;
psph1 = 0.  0.  Rsph;
psph2 = 0.5 0.  Rsph;
sphz0s = syme sphz0 'PLAN' psph0 psph1 psph2;

sphz1 = sphz0 et sphz0s;
elim sphz1 1.E-8;
*on ramene la sphere
depl sphz1 moin (0. 0. (Rsph-0.5));

* maillage du plan
nc = 10;

pc0 = 0. 0. 0.;
pc1 = 1. 0. 0.;
pc2 = 1. 1. 0.;
pc3 = 0. 1. 0.;

lc01 = pc0 droi nc pc1;
lc32 = pc3 droi nc pc2;

scz0 = lc01 regl nc lc32 coul bleu;
lc12 = cote 2 scz0 coul oran;
lc03 = cote 4 scz0 coul vert;

trac (700 500 -500) (sphz1 et scz0) CACH;
trac (700 500 100) (sphz1 et scz0) CACH;

temp zero;
* opti impi 12 trac open;
sphz11 scz00 cerz01 cerz00 = INTE 'GEOM' sphz1 scz0;
* opti impi 0;
temp impr ;
temp sgac impr;
cerz01 = cerz01 coul rose;
cerz00 = cerz00 coul roug;
trac (sphz11 et cerz01) 'CACH';
trac (0. 0. -100) (scz00 et (cerz00 moin (0. 0. 1.E-5))) 'CACH';

* opti donn 5;

* on veut une calotte
pt01 = CHAN cerz01 'POI1';
pt11 = CHAN sphz11 'POI1';
calot1 = sphz0s ;
ncalot0 = nbel calot1;
repe bcalot 10;
  ptapp = inte pt11 (chan calot1 'POI1') ;
  ptapp = diff ptapp (inte ptapp pt01 'NOVE');
  calot0 = calot1;
  ef2add = sphz11 ELEM 'APPUYE' 'LARGEMENT' ptapp;
  ef2add = diff ef2add (inte calot1 ef2add 'NOVE');
  calot1 = calot1 et ef2add;
  trac (calot1 et scz00) 
  'TITR' (chai 'calotte iteration' (&bcalot));
  ncalot1 = nbel calot1;
  mess (&bcalot) ncalot1;
  si (ncalot1 ega ncalot0); quit bcalot;  fins;
  ncalot0=ncalot1;
fin bcalot;

* on verifie qu on a bien un cercle centré en 0.5 0.5
x00 y00 z00 = coor cerz00;
r00 = (((x00-0.5)**2) + ((y00-0.5)**2))**0.5;
* trac (0. 0. 100 ) r00 (cerz00);
ecar00 = r00 - 0.33;
si ( (maxi ecar00 'ABS') >eg 1.E-2);  nberr=nberr+1; fins;
* et que lon traverse pas le plan
zcal1 = coor calot1 3;
si ((mini zcal1) < -5.E-5); nberr=nberr+1; fins;
mess '8 : nberr=' nberr;


******* CAS SPHERE - SPHERE ******

TITR 'CAS COMPLEXE 9 : SPHERE - SPHERE';
sphz2 = sphz1 TOUR pc0 pc1 60.;
trac (900 -300 500) (sphz1 et sphz2) CACH;

* opti impi 12 trac open;
* opti impi 12;
sphz111 sphz222 cerz111 cerz222 = INTE 'GEOM' sphz1 sphz2 'NOVE';
* opti impi 0 donn 5;
cerz111=cerz111 coul rose;
trac (-900 300 500) (sphz111 et sphz222) CACH;
trac (900 -300 500) (sphz111 et cerz111) CACH;
trac (900 -300 500) (sphz222 et (cerz222 coul roug)) CACH;
* opti donn 5;

* on veut une calotte
pt01 = CHAN cerz111 'POI1';
pt11 = CHAN sphz111 'POI1';
calot11 =  sphz1 point proch (1. 1. 1.);
calot11 = sphz1 elem 'APPU' 'LARG' calot11;
ncalot0 = nbel calot11;
iserr=1;
repe bcalot 25;
  ptapp = inte pt11 (chan calot11 'POI1') ;
  ptapp = diff ptapp (inte ptapp pt01 'NOVE');
  calot0 = calot11;
  ef2add = sphz111 ELEM 'APPUYE' 'LARGEMENT' ptapp;
  ef2add = diff ef2add (inte calot11 ef2add 'NOVE');
  calot11 = calot11 et ef2add;
  trac (calot11 et pt01) 
  'TITR' (chai 'calotte iteration' (&bcalot));
  ncalot11 = nbel calot11;
  mess (&bcalot) ncalot11;
  si (ncalot11 ega ncalot0); iserr=0; quit bcalot;  fins;
  ncalot0=ncalot11;
fin bcalot;
nberr=nberr+iserr;
mess '9 : nberr=' nberr;


* mess (chai 'tapez "opti donn 3" pour sortie AVS');
* opti donn 5;
* ********************* SORTIES AVS ***************************
* 
* OPTI SORT 'AVS/INTGEO_CAS07_PLAN_0'; SORT 'AVS' s1;
* OPTI SORT 'AVS/INTGEO_CAS07_CYLINDRE_0'; SORT 'AVS' cyl2;
* OPTI SORT 'AVS/INTGEO_CAS07_CERCLE_1'; SORT 'AVS' cer11;
* OPTI SORT 'AVS/INTGEO_CAS07_PLAN_1'; SORT 'AVS' s114;
* OPTI SORT 'AVS/INTGEO_CAS07_PLANbis_1'; SORT 'AVS' s115;
* OPTI SORT 'AVS/INTGEO_CAS07_CYLINDRE_1'; SORT 'AVS' cyl22;
* 
* OPTI SORT 'AVS/INTGEO_CAS09_SPHERE1_0'; SORT 'AVS' sphz1;
* OPTI SORT 'AVS/INTGEO_CAS09_SPHERE2_0'; SORT 'AVS' sphz2;
* OPTI SORT 'AVS/INTGEO_CAS09_SPHERE1_1'; SORT 'AVS' sphz111;
* OPTI SORT 'AVS/INTGEO_CAS09_SPHERE2_1'; SORT 'AVS' sphz222;
* OPTI SORT 'AVS/INTGEO_CAS09_INTERS1_1'; SORT 'AVS' cerz111;
* OPTI SORT 'AVS/INTGEO_CAS09_INTERS2_1'; SORT 'AVS' cerz222;
* OPTI SORT 'AVS/INTGEO_CAS09_CALOTTE1_1'; SORT 'AVS' calot11;
* 
* 
* mess (chai 'tapez "opti donn 3" pour test du bon fonctionnement');
* opti donn 5;
************ BON FONCTIONNEMENT / ERREUR ? ****************
SI (nberr EGA 0);
  ERRE 0;
SINO;
  MESS 'il y a ' nberr ' erreurs detectees';
  ERRE 5;
FINS;

FIN ;

* CAS coplanaire a faire + tard...
* mess (chai 'tapez "opti donn 3" pour cas coplanaire');
* opti donn 5;
* ******* CAS coplanaire ******
* 
* TITR 'CAS 10 : COPLANAIRE ';
* dx = 0.1; 
* nx = enti (0.5 / dx);
* xp3 = 0.6; 
* yp3 = 0.5; 
* 
* dens dx ;
* p1 = 0. 0. 0.;
* p2 = 1. 0. 0.;
* p3 = xp3 yp3 0.;
* p4 = 1. 1. 0.;
* p5 = 0. 1. 0.;
* 
* l12 = p1 droi (2*nx) p2;
* l23 = p2 droi (-1*nx) p3;
* l34 = p3 droi (-1*nx) p4;
* l45 = p4 droi (2*nx) p5;
* l51 = p5 droi (2*nx) p1;
* 
* s1 = dall l12 (l23 et l34) l45 l51;
* 
* * avancee dans le plan
* lon23 = norm (p2 moin p3);
* nu2 = 0.3;
* ux2 = nu2 * (yp3/lon23);
* uy2 = nu2 * ((1.-xp3)/lon23);
* uxy2 = manu 'CHPO' l23 2 'UX' ux2 'UY' uy2 'NATU' 'DIFFUS';
* uxy4 = manu 'CHPO' l34 2 'UX' ux2 'UY' (-1.*uy2) 'NATU' 'DIFFUS';
* uxy = uxy2 + uxy4;
* vuxy = vect uxy 1. 'DEPL' BLEU;
* trac vuxy s1 ;
 

© Cast3M 2003 - All rights reserved.
Disclaimer