|
shape_doc 0.1
|
#include <solver_implicit.hpp>
Definition at line 49 of file solver_implicit.hpp.
| typedef bounding_box<C,Ref> BoundingBox |
Definition at line 53 of file solver_implicit.hpp.
Definition at line 54 of file solver_implicit.hpp.
Definition at line 52 of file solver_implicit.hpp.
| static void common_edge_point | ( | Seq< Point * > & | lp, |
| const MultivariateDenseBernstein & | p, | ||
| const BoxFace & | E, | ||
| const BoundingBox & | bx1, | ||
| const BoundingBox & | bx2 | ||
| ) | [inline, static] |
Definition at line 280 of file solver_implicit.hpp.
References box_face< C, V >::cvar(), box_face< C, V >::lower(), mmx::shape::lower(), mmx::max(), mmx::min(), box_face< C, V >::new_point(), box_face< C, V >::side(), mmx::solve(), mmx::shape_ssi::up(), box_face< C, V >::upper(), and mmx::shape::upper().
{
MultivariateDenseBernstein f;
tensor::face(f,p,E.cvar(0),E.side(0));
polynomial<double, with<Bernstein> > dw(1,f.size()-1), up(1,f.size()-1);
for(unsigned i=0; i<f.size();i++) {
up[i]= upper(f[i]);
dw[i]= lower(f[i]);
//up[i]=dw[i]=f[i];
}
double
U = std::max( E.lower(bx1), E.lower(bx2) ) ,
V = std::min( E.upper(bx1), E.upper(bx2) ) ;
Seq<double> sol;
solver< double, Sleeve<Approximate> >::solve(sol,dw,up,U,V);
sol.sort();// sort from smaller to bigger
Approximate approx;
for(unsigned i=0;i<sol.size(); i++)
{
lp<< E.new_point(bx1,sol[i]);
}
}
| static void edge_point | ( | Seq< Point * > & | lp, |
| const MultivariateDenseBernstein & | p, | ||
| const BoxFace & | E, | ||
| const BoundingBox & | bx | ||
| ) | [inline, static] |
Definition at line 91 of file solver_implicit.hpp.
References box_face< C, V >::cvar(), box_face< C, V >::is_valid(), box_face< C, V >::lower(), mmx::shape::lower(), box_face< C, V >::new_point(), box_face< C, V >::side(), mmx::solve(), mmx::shape_ssi::up(), box_face< C, V >::upper(), and mmx::shape::upper().
Referenced by cell2d_algebraic_curve< C, V >::cell2d_algebraic_curve().
{
MultivariateDenseBernstein f;
tensor::face(f,p,E.cvar(0),E.side(0));
polynomial<double, with<Bernstein> > dw(1,f.size()-1), up(1,f.size()-1);
for(unsigned i=0; i<f.size();i++) {
up[i]= upper(f[i]);
dw[i]= lower(f[i]);
}
double
U = E.lower(bx),
V = E.upper(bx);
Seq<double> sol;
solver< double, Sleeve<Approximate> >::solve(sol,dw,up,U,V);
// std::cout<<"****U= "<<U<<std::endl;
// std::cout<<"****V= "<<V<<std::endl;
// std::cout<<"***dw= "<<dw<<std::endl;
// std::cout<<"***up= "<<up<<std::endl;
// std::cout<<"******Sols : "<<sol.size()<<std::endl;
Approximate approx;
std::vector<double> pt(3);
for(unsigned i=0;i<sol.size(); i++)
if(E.is_valid(bx, sol[i], approx.eps)) {
lp<< E.new_point(bx,sol[i]);
}
}
| static int edge_sign_var | ( | const MultivariateDenseBernstein & | p, |
| const BoxFace & | E | ||
| ) | [inline, static] |
Definition at line 127 of file solver_implicit.hpp.
References box_face< C, V >::cvar(), and box_face< C, V >::side().
{
MultivariateDenseBernstein f;
tensor::face(f,p,E.cvar(0),E.side(0));
return sign_variation(f.begin(), f.end());
}
| static void extremal | ( | Seq< Point * > & | sol, |
| const Polynomial & | pol, | ||
| const BoundingBox & | b | ||
| ) | [inline, static] |
Definition at line 197 of file solver_implicit.hpp.
References solver_implicit< C, V >::new_point(), Polynomial, bounding_box< C, V >::xmax(), bounding_box< C, V >::xmin(), bounding_box< C, V >::ymax(), and bounding_box< C, V >::ymin().
Referenced by cell2d_algebraic_curve< C, V >::cell2d_algebraic_curve(), and mmx::shape::extremal().
{
typedef polynomial< double, with<Bernstein> > MultivariateDenseBernstein;
// typedef Polynomial MultivariateDenseBernstein;
typedef polynomial< GMP::rational, with<Bernstein> > MultivariateDenseBernsteinQ;
Seq<mmx::GMP::rational> bx;
bx<<as<mmx::GMP::rational>(b.xmin());
bx<<as<mmx::GMP::rational>(b.xmax());
bx<<as<mmx::GMP::rational>(b.ymin());
bx<<as<mmx::GMP::rational>(b.ymax());
//tensor::bernstein<mmx::GMP::rational> P(pol.rep(),bx);
//typename Polynomial::Scalar mx = as<typename Polynomial::Scalar>(array::max_abs(P));
//Polynomial Pol=pol/mx, dxpol = diff(Pol,0), dypol = diff(Pol,1);
Polynomial dxpol = diff(pol,0), dypol = diff(pol,1);
tensor::bernstein<mmx::GMP::rational>
dxP(dxpol.rep(),bx),dyP(dypol.rep(),bx);
MultivariateDenseBernstein dxp,dyp;
let::assign(dxp.rep(), dxP);
let::assign(dyp.rep(), dyP);
Seq<MultivariateDenseBernstein> sys;
// Seq<MultivariateDenseBernsteinQ> sys;
sys<<dxp<<dyp;
solver<double, ProjRd<SBD_RDRDL> > slv;
std::vector<double> res;
slv.solve_bernstein(res,sys);
double x_sc= (b.xmax()-b.xmin()), y_sc= (b.ymax()-b.ymin());
for(unsigned i=0;i<res.size();i+=2) {
sol << new_point(b.xmin()+res[i]*x_sc, b.ymin()+res[i+1]*y_sc, 0.0);
}
}
| static void face_point | ( | Seq< Point * > & | sol, |
| const Seq< MultivariateDenseBernstein > & | eqs, | ||
| const BoxFace & | F, | ||
| const BoundingBox & | bx | ||
| ) | [inline, static] |
Definition at line 136 of file solver_implicit.hpp.
References box_face< C, V >::cvar(), box_face< C, V >::is_valid(), box_face< C, V >::new_point(), Polynomial, and box_face< C, V >::side().
Referenced by cell3d_algebraic_curve< C, V >::cell3d_algebraic_curve().
{
typedef polynomial< double, with<Bernstein> > Polynomial;
Polynomial f, p;
Seq<Polynomial> sys;
for(unsigned i=0;i< eqs.size(); i++) {
let::assign(p.rep(), eqs[i].rep());
tensor::face(f.rep(), p.rep(), F.cvar(0), F.side(0));
sys<<f;
}
solver<double, ProjRd<SBD_RDRDL> > slv;
std::vector<double> res;
slv.solve_bernstein(res,sys);
Approximate approx;
for(int i=0;i<(int)res.size()-1;i+=2) {
// if (res[i]<approx.eps) res[i]=0;
// else if (res[i]>1-approx.eps) res[i]=1;
// if (res[i+1]<approx.eps) res[i+1]=0;
// else if (res[i+1]>1-approx.eps) res[i+1]=1;
Point * p = F.new_point(bx, res[i], res[i+1]);
if (F.is_valid(*p, bx)) sol<< p;
// else delete p;
}
}
| static void intersection | ( | Seq< Point * > & | sol, |
| const Polynomial & | f1, | ||
| const Polynomial & | f2, | ||
| const BoundingBox & | bx | ||
| ) | [inline, static] |
Definition at line 171 of file solver_implicit.hpp.
References solver_implicit< C, V >::new_point(), bounding_box< C, V >::xmax(), bounding_box< C, V >::xmin(), bounding_box< C, V >::ymax(), and bounding_box< C, V >::ymin().
{
typedef polynomial< double, with<Bernstein> > MultivariateDenseBernstein;
MultivariateDenseBernstein p1, p2;
let::assign(p1.rep(), f1.rep() );
let::assign(p2.rep(), f2.rep() );
Seq<MultivariateDenseBernstein> sys;
sys<<p1<<p2;
solver<double, ProjRd<SBD_RDRDL> > slv;
std::vector<double> res;
slv.solve_bernstein(res,sys);
double x_sc= (bx.xmax()-bx.xmin()), y_sc= (bx.ymax()-bx.ymin());
for(unsigned i=0;i<res.size();i+=2)
{
sol << new_point(bx.xmin()+res[i]*x_sc, bx.ymin()+res[i+1]*y_sc, 0.0);
}
}
| static Point* new_point | ( | double | a, |
| double | b, | ||
| double | c | ||
| ) | [inline, static] |
Definition at line 85 of file solver_implicit.hpp.
Referenced by solver_implicit< C, V >::extremal(), solver_implicit< C, V >::intersection(), and solver_implicit< C, V >::singular().
{
return new Point(a,b,c);
}
| typedef REF_OF | ( | V | ) |
| static void singular | ( | Seq< Point * > & | sol, |
| const Polynomial & | pol, | ||
| const BoundingBox & | b | ||
| ) | [inline, static] |
Definition at line 242 of file solver_implicit.hpp.
References solver_implicit< C, V >::new_point(), Polynomial, bounding_box< C, V >::xmax(), bounding_box< C, V >::xmin(), bounding_box< C, V >::ymax(), and bounding_box< C, V >::ymin().
{
typedef polynomial< double, with<Bernstein> > MultivariateDenseBernstein;
typedef polynomial< GMP::rational, with<Bernstein> > MultivariateDenseBernsteinQ;
Seq<mmx::GMP::rational> bx;
bx<<as<mmx::GMP::rational>(b.xmin());
bx<<as<mmx::GMP::rational>(b.xmax());
bx<<as<mmx::GMP::rational>(b.ymin());
bx<<as<mmx::GMP::rational>(b.ymax());
Polynomial dxpol = diff(pol,0), dypol = diff(pol,1);
tensor::bernstein<mmx::GMP::rational>
P(pol.rep(),bx), dxP(dxpol.rep(),bx),dyP(dypol.rep(),bx);
MultivariateDenseBernstein p,dxp,dyp;
let::assign(p.rep() , P);
let::assign(dxp.rep(), dxP);
let::assign(dyp.rep(), dyP);
Seq<MultivariateDenseBernstein> sys;
sys<<p<<dxp<<dyp;
solver<double, ProjRd<SBD_RDRDL> > slv;
// solver<ring<double,Bernstein>, ProjRd<SBD_RDRDL> >::eps=1e-10;
std::vector<double> res;
slv.solve_bernstein(res,sys);
double x_sc= (b.xmax()-b.xmin()), y_sc= (b.ymax()-b.ymin());
for(unsigned i=0;i<res.size();i+=2) {
sol << new_point(b.xmin()+res[i]*x_sc, b.ymin()+res[i+1]*y_sc, 0.0);
}
}
Definition at line 61 of file solver_implicit.hpp.
Definition at line 83 of file solver_implicit.hpp.
Referenced by cell3d_algebraic_curve< C, V >::cell3d_algebraic_curve().
box_face< C, REF_OF(V) > east_back_edge [static] |
Definition at line 66 of file solver_implicit.hpp.
Definition at line 59 of file solver_implicit.hpp.
Referenced by cell2d_algebraic_curve< C, V >::cell2d_algebraic_curve().
Definition at line 81 of file solver_implicit.hpp.
Referenced by cell3d_algebraic_curve< C, V >::cell3d_algebraic_curve().
box_face< C, REF_OF(V) > east_front_edge [static] |
Definition at line 71 of file solver_implicit.hpp.
box_face< C, REF_OF(V) > front_edge [static] |
Definition at line 60 of file solver_implicit.hpp.
box_face< C, REF_OF(V) > front_face [static] |
Definition at line 82 of file solver_implicit.hpp.
Referenced by cell3d_algebraic_curve< C, V >::cell3d_algebraic_curve().
box_face< C, REF_OF(V) > north_back_edge [static] |
Definition at line 63 of file solver_implicit.hpp.
box_face< C, REF_OF(V) > north_east_edge [static] |
Definition at line 75 of file solver_implicit.hpp.
box_face< C, REF_OF(V) > north_edge [static] |
Definition at line 56 of file solver_implicit.hpp.
Referenced by cell2d_algebraic_curve< C, V >::cell2d_algebraic_curve().
box_face< C, REF_OF(V) > north_face [static] |
Definition at line 78 of file solver_implicit.hpp.
Referenced by cell3d_algebraic_curve< C, V >::cell3d_algebraic_curve().
box_face< C, REF_OF(V) > north_front_edge [static] |
Definition at line 68 of file solver_implicit.hpp.
box_face< C, REF_OF(V) > north_west_edge [static] |
Definition at line 73 of file solver_implicit.hpp.
box_face< C, REF_OF(V) > south_back_edge [static] |
Definition at line 64 of file solver_implicit.hpp.
box_face< C, REF_OF(V) > south_east_edge [static] |
Definition at line 76 of file solver_implicit.hpp.
box_face< C, REF_OF(V) > south_edge [static] |
Definition at line 57 of file solver_implicit.hpp.
Referenced by cell2d_algebraic_curve< C, V >::cell2d_algebraic_curve().
box_face< C, REF_OF(V) > south_face [static] |
Definition at line 79 of file solver_implicit.hpp.
Referenced by cell3d_algebraic_curve< C, V >::cell3d_algebraic_curve().
box_face< C, REF_OF(V) > south_front_edge [static] |
Definition at line 69 of file solver_implicit.hpp.
box_face< C, REF_OF(V) > south_west_edge [static] |
Definition at line 74 of file solver_implicit.hpp.
box_face< C, REF_OF(V) > west_back_edge [static] |
Definition at line 65 of file solver_implicit.hpp.
Definition at line 58 of file solver_implicit.hpp.
Referenced by cell2d_algebraic_curve< C, V >::cell2d_algebraic_curve().
Definition at line 80 of file solver_implicit.hpp.
Referenced by cell3d_algebraic_curve< C, V >::cell3d_algebraic_curve().
box_face< C, REF_OF(V) > west_front_edge [static] |
Definition at line 70 of file solver_implicit.hpp.