1 //============================================ IntAna2d_AnaIntersection_6.cxx
2 //============================================================================
3 #include <IntAna2d_AnaIntersection.jxx>
5 #include <IntAna2d_Outils.hxx>
7 void IntAna2d_AnaIntersection::Perform(const gp_Elips2d& Elips,
8 const IntAna2d_Conic& Conic)
10 Standard_Boolean EIsDirect = Elips.IsDirect();
11 Standard_Real A,B,C,D,E,F;
12 Standard_Real pcte,ps,pc,p2sc,pcc,pss;
13 Standard_Real minor_radius=Elips.MinorRadius();
14 Standard_Real major_radius=Elips.MajorRadius();
16 Standard_Real tx,ty,S;
18 done = Standard_False;
20 para = Standard_False;
21 iden = Standard_False;
22 empt = Standard_False;
25 gp_Ax2d Axe_rep(Elips.XAxis());
27 Conic.Coefficients(A,B,C,D,E,F);
28 Conic.NewCoefficients(A,B,C,D,E,F,Axe_rep);
30 // Parametre : a avec x=MajorRadius Cos(a) et y=MinorRadius Sin(a)
32 pss= B*minor_radius*minor_radius; // SIN ^2
33 pcc= A*major_radius*major_radius-pss; // COS ^2
34 p2sc=C*major_radius*minor_radius; // 2 SIN COS
35 pc= 2.0*D*major_radius; // COS
36 ps= 2.0*E*minor_radius; // SIN
39 math_TrigonometricFunctionRoots Sol(pcc,p2sc,pc,ps,pcte,0.0,2.0*M_PI);
46 if(Sol.InfiniteRoots()) {
51 nbp=Sol.NbSolutions();
54 tx=major_radius*Cos(S);
55 ty=minor_radius*Sin(S);
56 Coord_Ancien_Repere(tx,ty,Axe_rep);
59 lpnt[i-1].SetValue(tx,ty,S);
61 Traitement_Points_Confondus(nbp,lpnt);