26 #pragma package(smart_init)
36 int nb_pts=ctrpts.size();
43 for (
int i=0;i<nb_pts;i++)
59 cosi=ctrpts[i].
get_x()/nori;
60 sini=ctrpts[i].get_y()/nori;
67 cosi=ctrpts[i].get_y()/nori;
68 sini=ctrpts[i].get_z()/nori;
76 cosi=ctrpts[i].
get_x()/nori;
77 sini=ctrpts[i].get_z()/nori;
82 double2 d_theta=sini*costh-cosi*sinth;
100 return ((
a>b)? b :
a);
129 static const double2 GOLD=1.618034;
130 static const double2 GLIMIT=100.0;
131 static const double2 TINY=1.0e-20;
138 int idx_pts_depart1=-1;
139 int idx_pts_depart2=-1;
140 int nb_pts=ctrpts.size();
160 for (
int i=0;i<nb_pts;i++)
252 u=bx-((bx-cx)*q-(bx-ax)*r)/(d*
get_signe(
get_max((q-r).get_fabs(),TINY),q-r));
253 ulim=bx+GLIMIT*(cx-bx);
254 if ((bx-u)*(u-cx)>zer)
274 else if ((cx-u)*(u-ulim)>zer)
285 else if ((u-ulim)*(ulim-cx)>=zer)
307 double normal_palan_project[3];
308 double normal_au_plan[3];
310 double root[3]={0.,0.,0.};
315 std::vector<OT_VECTEUR_4DD> syst_axe;
316 int nb_points=ctrpts.size();
317 std::vector<OT_VECTEUR_4DD> ctrpts_proj;
329 for (
int i=0;i<nb_points;i++)
331 if (ctrpts[i].get_x()==x0) cmpt1++;
332 if (ctrpts[i].get_y()==y0) cmpt2++;
333 if (ctrpts[i].get_z()==z0) cmpt3++;
336 if (cmpt1==nb_points) {
338 normal_au_plan[0]=1.;
339 normal_au_plan[1]=0.;
340 normal_au_plan[2]=0.;
342 if (cmpt2==nb_points) {
344 normal_au_plan[0]=0.;
345 normal_au_plan[1]=1.;
346 normal_au_plan[2]=0.;
348 if (cmpt3==nb_points) {
350 normal_au_plan[0]=0.;
351 normal_au_plan[1]=0.;
352 normal_au_plan[2]=1.;
359 if (theta==1e-6) theta=0.;
400 if (cmpt1==nb_points||cmpt2==nb_points||cmpt3==nb_points)
403 axe3[0]=normal_au_plan[0];
404 axe3[1]=normal_au_plan[1];
405 axe3[2]=normal_au_plan[2];
407 syst_axe.insert( syst_axe.end(),axe1);
408 syst_axe.insert( syst_axe.end(),axe2);
409 syst_axe.insert( syst_axe.end(),axe3);
414 normal_palan_project[0] =s;
415 normal_palan_project[1] =-c;
416 normal_palan_project[2] =0.;
419 for (
int i=0;i<nb_points;i++)
425 pnt[0] =(ctrpts[i].get_x()).get_x();
426 pnt[1] =(ctrpts[i].get_y()).get_x();
427 pnt[2] =(ctrpts[i].get_z()).get_x();
431 if ((proj_pnt[0]!=0.||proj_pnt[1]!=0.||proj_pnt[2]!=0)&&!pris)
433 e1_proj[0]=proj_pnt[0];
434 e1_proj[1]=proj_pnt[1];
435 e1_proj[2]=proj_pnt[2];
436 double norm=
sqrt(pow(proj_pnt[0],2)+pow(proj_pnt[1],2)+pow(proj_pnt[2],2));
438 e1_proj[0]=e1_proj[0]/norm;
439 e1_proj[1]=e1_proj[1]/norm;
440 e1_proj[2]=e1_proj[2]/norm;
442 e2_proj[0]=normal_palan_project[1]*e1_proj[2]-normal_palan_project[2]*e1_proj[1];
443 e2_proj[1]=normal_palan_project[2]*e1_proj[0]-normal_palan_project[0]*e1_proj[2];
444 e2_proj[2]=normal_palan_project[0]*e1_proj[1]-normal_palan_project[1]*e1_proj[0];
446 OT_VECTEUR_3D V1(e1_proj[0],e2_proj[0],normal_palan_project[0]);
448 OT_VECTEUR_3D V3(e1_proj[2],e2_proj[2],normal_palan_project[2]);
450 P.change_vecteur1(V1);
451 P.change_vecteur2(
V2);
452 P.change_vecteur3(V3);
467 ctrpts_proj.insert(ctrpts_proj.end(),pt_proj);
476 double nnv_x=Vp*
P.get_vecteur1();
477 double nnv_y=Vp*
P.get_vecteur2();
478 double nnv_z=Vp*
P.get_vecteur3();
486 axe3[0]=axe1[1]*axe2[2]-axe1[2]*axe2[1];
487 axe3[1]=axe1[2]*axe2[0]-axe1[2]*axe2[2];
488 axe3[2]=axe1[0]*axe2[1]-axe1[2]*axe2[0];
493 syst_axe.insert( syst_axe.end(),axe1);
494 syst_axe.insert( syst_axe.end(),axe2);
495 syst_axe.insert( syst_axe.end(),axe3);
506 double normal_palan_project[3];
509 double theta,cosin,sinus;
511 std::vector<OT_VECTEUR_4DD> ctrpts_proj;
512 std::vector<OT_VECTEUR_4DD> syst_axe;
513 int nb_points=ctrpts.size();
516 normal_palan_project[0] =(axes[2].get_x()).get_x();
517 normal_palan_project[1] =(axes[2].get_y()).get_x();
518 normal_palan_project[2] =(axes[2].get_z()).get_x();
519 origine[0] =root[0].
get_x();
520 origine[1] =root[1].
get_x();
521 origine[2] =root[2].
get_x();
523 OT_VECTEUR_3D V1((axes[0].get_x()).get_x(),(axes[0].get_y()).get_x(),(axes[0].get_z()).get_x());
524 OT_VECTEUR_3D V2((axes[1].get_x()).get_x(),(axes[1].get_y()).get_x(),(axes[1].get_z()).get_x());
525 OT_VECTEUR_3D V3((axes[2].get_x()).get_x(),(axes[2].get_y()).get_x(),(axes[2].get_z()).get_x());
532 for (
int i=0;i<nb_points;i++)
539 point[0] =(ctrpts[i].get_x()).get_x();
540 point[1] =(ctrpts[i].get_y()).get_x();
541 point[2] =(ctrpts[i].get_z()).get_x();
544 for (
int i=0;i<3;i++)
546 proj_pnt[i]-= origine[i];
558 ctrpts_proj.insert(ctrpts_proj.end(),pt_proj);
588 V2.change_x((e2[0].get_x()));
589 V2.change_y((e2[1].get_x()));
590 V2.change_z((e2[2].get_x()));
599 syst_axe.insert( syst_axe.end(),e1);
600 syst_axe.insert( syst_axe.end(),e2);
601 syst_axe.insert( syst_axe.end(),e3);
613 int nb_pts=ctrpts.size();
616 for (
int i=0;i<nb_pts;i++)
621 p(0,2)=p(0,0)+pt[0].
get_x();
623 p(1,2)=p(0,0)+pt[1].
get_x();
626 v[2]=v[1]+pt[2].
get_x();
638 for (
int j=0;j<4;j++)
640 if (tparam[j].get_fabs()<prec)
643 tparam[3]=tparam[3]/nor;