Developer documentation

fatarcs.hpp
Go to the documentation of this file.
1 #include <stack>
2 #include <fstream>
3 #include <string>
4 #include <vector>
5 
6 #include <realroot/Interval.hpp>
11 
12 #pragma once
13 
14 #define REP poly.rep()
15 #define SIZE poly.size()
16 #define TODOUBLE as<double>
17 
18 using namespace mmx;
19 
21 //BOX structure
22 template<class C>
23 struct domain
24  {
25  typedef Interval<C> int_t;
27  typedef std::vector<C> vec_t;
28 
29 //CONSTRUCTORS
30 
31  seqint_t I;
32 
33 
34  domain( ){ };
35  domain( int n ){ int_t unit( C(0),C(1) ); for(int i = 0; i < n; i++){I<<unit;}; };
36  domain( int_t intxy ){ I<<intxy<<intxy; };
37  domain( int_t intx , int_t inty ){ I<<intx<<inty; };
38 
39 //FCTS
40  C dim(){
41  int d=0;
42  for(unsigned i = 0; i < I.size(); i++){d++;}
43  return(d);
44  }
45 
46 
47  C diam(){
48  C d=C(0);
49  for(unsigned i = 0; i < I.size(); i++){
50  d +=I[i].size()*I[i].size();}
51  return(sqrt(d));
52  }
53 
54  vec_t llc( )
55  {vec_t v(I.size());
56  for(unsigned i = 0; i < I.size(); i++){
57  v[i]= I[i].m;};
58  return v;
59  };
60 
61  vec_t urc( )
62  { vec_t v(I.size());
63  for(unsigned i = 0; i < I.size(); i++){
64  v[i]= I[i].M;};
65  return v;
66  };
67 
68  vec_t center( )
69  { vec_t v(I.size());
70  for(unsigned i = 0; i < I.size(); i++){
71  v[i]= I[i].center();};
72  return v;
73  };
74 
75 
77  {Seq<C> d;
78  for(unsigned i = 0; i < I.size(); i++){
79  d<<I[i].size();}
80  return(d);
81  };
82 
83  void print(int digits)
84  { std::cout.precision(digits);
85  std::cout<<"["<< TODOUBLE(I[0].m)<<", "<< TODOUBLE(I[0].M)<<"]x["<< TODOUBLE(I[1].m)<<", "<< TODOUBLE(I[1].M)<<"],"<<std::endl;
86  // std::cout << "box midpt: (" <<(llc()[0]+urc()[0])/C(2)<<","<<(llc()[1]+urc()[1])/C(2)<<")"<<std::endl;
87  std::cout << "diam: " <<diam()<<std::endl;
88  };
89 
90 
91  void split(domain<C> * ch)
92  {
93 
94  C cx=I[0].center() ;
95  C cy=I[1].center() ;
96 
97  Interval<C> Ixl(I[0].m , cx), Ixr(cx , I[0].M), Iyl(I[1].m , cy), Iyr(cy, I[1].M);
98 
99 
100  ch[0]=domain(Ixl,Iyl);
101  ch[1]=domain(Ixr,Iyl);
102  ch[2]=domain(Ixl,Iyr);
103  ch[3]=domain(Ixr,Iyr);
104  };/*subdivison of a box*/
105  /*
106 Seq< vec_t > cornerpts( )
107  { Seq< vec_t > cp;
108  cp<<vec(I[0].m,I[1].m)<<vec(I[0].M,I[1].m)<<vec(I[0].m,I[1].M)<<vec(I[0].M,I[1].M);
109  return cp;
110  };*/
111 
112 };//end of boxes
113 
114 
116 //arc_rep structure
117 
118 template<class C>
119 struct arc_rep
120 {
121 
122  typedef C coeff_t;
123  typedef std::vector<coeff_t> vec_t;
128 
129 
130 
131  vec_t pts[3];
132 
133  //CONSTRUCTORS
134 
135  arc_rep(){pts[0]=vec_t(); pts[1]=vec_t(); pts[2]=vec_t();};
136 
137  arc_rep( vec_t p0, vec_t p1, vec_t p2){
138  if(p0.size()!=0 && p1.size()!=0 && p2.size()!=0 )
139  {if(matrat(v_minus(p1,p0),v_minus(p2,p0))[1]> coeff_t(0)){pts[0]=p2; pts[1]=p1; pts[2]=p0;}
140  else{pts[0]=p0; pts[1]=p1; pts[2]=p2;}; }else{pts[0]=p0; pts[1]=p1; pts[2]=p2;}
141  };
142 
143  arc_rep( vec_t p[3]){
144  if(p[0].size()!=0 && p[1].size()!=0 && p[2].size()!=0 ){
145  if(matrat( v_minus(p[1],p[0]),v_minus(p[2],p[0]) )[1]> coeff_t(0)){pts[0]=p[2]; pts[1]=p[1]; pts[2]=p[0];}
146  else{pts[0]=p[0]; pts[1]=p[1]; pts[2]=p[2];}; }else{pts[0]=p[0]; pts[1]=p[1]; pts[2]=p[2];}
147  };
148 
149  //FCTS
150 
151 
152  coeff_t weight()
153  {return(dot(v_minus(pts[0],pts[1]),v_minus(pts[1],pts[2]))/
154  (v_length(v_minus(pts[1],pts[2]))*v_length(v_minus(pts[1],pts[0]))));};
155 
156 
157  vec_t midc(){
158  vec_t pp=v_minus(pts[0],pts[2]); pp=rotl(pp);
159  vec_t m=v_mul(coeff_t( sign(dot(pp, v_minus(pts[1],pts[2]) ))),pp);
160  coeff_t w=weight();
161 
162  vec_t d;
163  if( (coeff_t(1)-w*w) > coeff_t(0) && w!=coeff_t(0) ){
164  d=v_plus(v_div(v_plus(pts[0],pts[2]),coeff_t(2)),v_div(v_mul(coeff_t(sqrt( coeff_t(1)-w*w )),m),(coeff_t(2)*w))); }
165  else {
166  d=v_div(v_plus(pts[0],pts[2]),coeff_t(2)); };
167  return(d);
168 
169  };/*middle control point in bb rep.*/
170 
171 
172 
173  seq_t arc_eq(){
174 
175 
176  vec_t cvec=matrat(v_minus(pts[0],pts[1]),v_minus(pts[2],pts[1]));
177 
178  coeff_t eh2=cvec[1];
179  coeff_t ehx=dot(cvec, vec(pts[2][1]-pts[0][1],(coeff_t)(-1)*pts[0][0]-pts[2][0]));
180  coeff_t ehy=dot(cvec, vec(pts[0][0]-pts[2][0],(coeff_t)(-1)*pts[0][1]-pts[2][1]));
181  coeff_t ehc=dot(cvec, vec(pts[0][1]*pts[2][0]-pts[0][0]*pts[2][1],
182  pts[0][0]*pts[2][0]+pts[0][1]*pts[2][1]));
183 
184  seq_t eh; eh<<eh2<<ehx<<ehy<<ehc;
185 
186  return(eh);
187  }; /*coeff vector of monom rep: eh2*(x^2+y^2)+ehx*x+ehy*y+ehc=0*/
188 
189 
190 
191  vec_t critpt(int var){
192 
193  vec_t pt;
194  Seq<coeff_t> coeffx,coeffy,wvec;
195  pt=vec(coeff_t(-1),coeff_t(-1));
196  coeffx<<pts[0][0]<< midc()[0]*weight()<< pts[2][0];
197  coeffy<<pts[0][1]<< midc()[1]*weight()<<pts[2][1];
198  wvec<<coeff_t(1)<< weight()<<coeff_t(1);
199  coeff_t t=0, cx,cy,w;
200 
201  if (var==0 && (coeffx[2]-coeffx[0])!=0)
202  {
203  t=(coeffx[0]-coeffx[1])/(coeffx[2]-coeffx[0]);
204  }
205  else if (var==1 && (coeffy[2]-coeffy[0])!=0 )
206  {
207  t=(coeffy[0]-coeffy[1])/(coeffy[2]-coeffy[0]);
208  };
209 
210  if(is_unit1(t)){
211  tensor::eval(cx,seq2b(coeffx).rep(),t);
212  tensor::eval(cy,seq2b(coeffy).rep(),t);
213  tensor::eval(w,seq2b(wvec).rep(),t);
214  pt=vec( cx/w , cy/w );
215  }
216  // std::cout <<pt<<std::endl;
217  return(pt);
218  }; /*tang. pt in var*/
219 
220 
222  vec_t newp[3];
223  Seq<coeff_t> mo, ehrat;
224  int i;unsigned j;
225  vec_t pp=rotl(v_minus(pts[0],pts[2]));
226 
227  coeff_t l=v_length(pp);
228  coeff_t w=weight();
229 
230  for( i=0; i<3; i++){newp[i]=vec_t(); };
231  arc_rep<coeff_t> ncirc(newp);
232  if( l!=coeff_t(0) ){
233  if( w==coeff_t(1)){ for( i=0; i<3; i++){ newp[i]=v_plus(pts[i],v_mul(r/l,pp)); } }//case of a quarter of a circle
234  else if (
235  //( coeff_t(1)-w*w )>coeff_t(0) &&
236  ( r + l/(coeff_t(2)*sqrt( coeff_t(1)-w*w ) )) > coeff_t(0)
237  && v_length( v_minus(pts[1],v_plus(pts[0],pts[2])) )!=coeff_t(0) )
238  {
239 
240  newp[0]=v_plus(pts[0],v_mul(coeff_t(2)*r/l,
241  rotl( v_minus(v_minus(v_mul((coeff_t(1)+w),pts[1]),v_mul((w+ coeff_t(0.5)),pts[0])),
242  v_div(pts[2],coeff_t(2))
243  )
244  )
245  )
246  );
247 
248  newp[1]=v_plus(pts[1],
249  v_mul(r/v_length(v_minus(pts[1],v_div(v_plus(pts[0],pts[2]),coeff_t(2)))),
250  v_minus(v_minus(pts[1],v_div(pts[0],coeff_t(2))),v_div(pts[2],coeff_t(2)))
251  )
252  );
253 
254  newp[2]=v_minus(pts[2],
255  v_mul(coeff_t(2)*r/l,
256  rotl(v_minus(v_minus(v_mul((coeff_t(1)+w),pts[1]),v_mul((w+(coeff_t)(0.5)),pts[2])),
257  v_div(pts[0],coeff_t(2))
258  )
259  )
260  )
261  );
262  };
263 
264  //std::cout <<"newp0: "<<newp[0]<<" "<<newp[1]<<" "<<newp[2]<<std::endl;
265  ncirc=arc_rep<coeff_t>(newp);
266  if(is_arc(ncirc)){
267  Seq<vec_t> isp;
268  ehrat=ncirc.arc_eq();
269  mo=solve2(ehrat[0],ehrat[2],ehrat[3]);
270  for( j=0; j<2; j++){if(is_unit1(mo[j])){isp<<vec(coeff_t(0),mo[j]);};};
271  mo=solve2(ehrat[0],ehrat[2],ehrat[0]+ehrat[1]+ehrat[3]);
272  for( j=0; j<2; j++){if(is_unit1(mo[j])){isp<<vec(coeff_t(1),mo[j]);};};
273  mo=solve2(ehrat[0],ehrat[1],ehrat[3]);
274  for( j=0; j<2; j++){if(is_unit1(mo[j])){isp<<vec(mo[j],coeff_t(0));};};
275  mo=solve2(ehrat[0],ehrat[1],ehrat[0]+ehrat[2]+ehrat[3]);
276  for( j=0; j<2; j++){if(is_unit1(mo[j])){isp<<vec(mo[j],coeff_t(1));};};
277 
278  if (isp.size()==0){newp[0]=vec_t(); }else{
279  newp[0]=isp[0];
280  for( j=1; j<isp.size(); j++)
281  {if(v_length(v_minus(isp[j],pts[0]))<v_length(v_minus(newp[0],pts[0]))){newp[0]=isp[j];};};
282  };
283 
284  if (isp.size()==0){newp[2]=vec_t(); }else{
285  newp[2]=isp[0];
286  for( j=1; j<isp.size(); j++)
287  {if(v_length(v_minus(isp[j],pts[2]))<v_length(v_minus(newp[2],pts[2]))){newp[2]=isp[j];};};
288  };
289  ncirc=arc_rep<coeff_t>(newp);
290  // std::cout <<"newp1: "<<newp[0]<<" "<<newp[1]<<" "<<newp[2]<<std::endl;
291  /*if (is_arc(ncirc)){
292  if( matrat(v_minus(newp[1],newp[0]),v_minus(newp[2],newp[0]))[1]>coeff_t(0) )
293  { vec_t u=newp[0]; newp[0]=newp[2]; newp[2]=u;}};*/
294  };
295  };
296  return( ncirc );
297  } /*offset arc computation(with precise endpoints) - OR OUTSIDE!!!*/
298 
299 };//end of struct arc_rep
300 
301 
303 //box_rep structure
304 
305 
306 template<class C>
307 struct box_rep
308 {
309 
310  typedef C coeff_t;
311  typedef std::vector<coeff_t> vec_t;
316 
317 
318  box_t box;
319  bernstein_t poly;
320 
321  //CONSTRUCTORS
322 
323  box_rep(bernstein_t p){box_t bb; poly=p; box=bb; };
324  box_rep(bernstein_t p, box_t bb)
325  {
326  bernstein_t pa=p;
327 
328  tensor::restrict(pa.rep(), 0 , bb.I[0].m , bb.I[0].M );
329  tensor::restrict(pa.rep(), 1 , bb.I[1].m , bb.I[1].M );
330 
331  poly=pa;
332  box=bb;
333  };
334 
335 
336  //FCTS
337 
338 bool not_empty(){
339 
340  if( sign(min_coeff(poly))*sign(max_coeff(poly)) > 0 ){
341  return false;
342  }
343  else{
344  return true;
345  }
346 }/*detect empty boxes*/
347 
348 
349  bool edge_event(int var , int n){
350 
351  bernstein_t face_p;
352  int event = 0;
353 
354  tensor::face(face_p, poly, var, n);
355 
356  int stc = 0;
357 
358  for(unsigned i = 0 ; i < face_p.size() ; i++){
359  if( stc*sign(face_p.rep()[i]) == -1 ){
360  stc = sign(face_p.rep()[i]); event++;
361  }
362  else if ( stc == 0 && sign(face_p.rep()[i])!=0 ){
363  stc = sign(face_p.rep()[i]);
364  };
365  }
366  if(event==1){return true;}else{return false;};
367 }/*edge event along ONE edge*/
368 
369 
370 int first_nonzero(bernstein_t list, int e){
371 
372  int elem =0;
373  int n = list.size();
374  int j;
375 
376  for(int i = 0; i < n ; i++){
377  if( e==0 ){ j=i; }else{j=n-i-1;}
378  if( coeff_t(0)!=(list[j]) ){
379  elem=sign(list[j]);
380  break;
381  }
382  }
383  return elem;
384 
385 }
386 
387 
388  bool corner_event(int c1, int c2){
389  vec_t evc=vec(coeff_t(c1),coeff_t(c2));
390  coeff_t v;
391  eval(v, poly.rep(), evc );
392  bernstein_t face_p, face_q;
393 
394  if ( is_small(v) ){
395  tensor::face(face_p, poly, 0, c2);
396  tensor::face(face_q, poly, 1, c1);
397 
398  if (first_nonzero(face_p, c1)*first_nonzero(face_q, c2) < 0){return true; }else{ return false; };
399 
400  }else{ return false;};
401 }
402 
403 
405  Seq<vec_t> elist;
406  if(edge_event( 0, 0)){elist<<vec(coeff_t(0),coeff_t(0))<<vec(coeff_t(1),coeff_t(0));}
407  if(edge_event( 0, 1)){elist<<vec(coeff_t(0),coeff_t(1))<<vec(coeff_t(1),coeff_t(1));}
408  if(edge_event( 1, 0)){elist<<vec(coeff_t(0),coeff_t(0))<<vec(coeff_t(0),coeff_t(1));}
409  if(edge_event( 1, 1)){elist<<vec(coeff_t(1),coeff_t(0))<<vec(coeff_t(1),coeff_t(1));}
410 
411  if(corner_event( 0, 0)){elist<<vec(coeff_t(0),coeff_t(0))<<vec_t();}
412  if(corner_event( 0, 1)){elist<<vec(coeff_t(0),coeff_t(1))<<vec_t();}
413  if(corner_event( 1, 0)){elist<<vec(coeff_t(1),coeff_t(0))<<vec_t();}
414  if(corner_event( 1, 1)){elist<<vec(coeff_t(1),coeff_t(1))<<vec_t();}
415  return elist;
416 
417 } //boxes with single implicitly defined curve segment*/
418 
419 
420 coeff_t min_grad(){
421 
422  bernstein_t p0 = diff(poly,0);
423  bernstein_t p1 = diff(poly,1);
424  bernstein_t grad;
425  bernstein_t gradx0 = p0;
426  bernstein_t gradx1 = p1;
427 
428 
429  mul(gradx0.rep(),p0.rep());
430  mul(gradx1.rep(),p1.rep());
431  add(grad.rep(),gradx0.rep(),gradx1.rep());
432 
433  return(min_coeff(grad));
434 }
435 
436 
437 coeff_t max_eval(arc_rep_t circ){
438  bernstein_t neww, bxt, byt, bwt, num, polyco;
439  monom_t monomp, newnom, xt, yt, wt;
440  Seq<coeff_t> v;
441 
442  v<<coeff_t(1)<<circ.weight()<<coeff_t(1);
443  neww=seq2b( v );
444  v.clear();
445 
446  pow(neww,degree(poly,0)+degree(poly,1));
447 
448  v<<circ.pts[0][0]<<circ.midc()[0]*circ.weight()<<circ.pts[2][0];
449  bxt=seq2b(v); v.clear();
450  tensor::assign(xt.rep(),bxt.rep());
451  v<<circ.pts[0][1]<<circ.midc()[1]*circ.weight()<<circ.pts[2][1];
452  byt=seq2b(v); v.clear();
453  tensor::assign(yt.rep(),byt.rep());
454  v<<coeff_t(1)<<circ.weight()<<coeff_t(1);
455  bwt=seq2b(v); v.clear();
456  tensor::assign(wt.rep(),bwt.rep());
457 
458  Seq<monom_t> paramv; paramv<<wt<<xt<<yt;
459 
460  polyco=poly;
461  tensor::assign(monomp.rep(),polyco.rep());
462  tensor::heval(newnom, monomp.rep(), paramv );
463 
464  let::assign(num.rep(),newnom.rep());
465 
466  return(abs_max_coeff(num)/min_coeff(neww));
467 
468 };
469 
470 
471 };//end of structure box_rep
472 
473 
474 
475 
476 
C coeff_t
Definition: fatarcs.hpp:310
std::vector< C > v_mul(C q, std::vector< C > p)
Definition: fatarcs_fcts.hpp:75
bool corner_event(int c1, int c2)
Definition: fatarcs.hpp:388
bool not_empty()
Definition: fatarcs.hpp:338
Sequence of terms with reference counter.
Definition: Seq.hpp:28
arc_rep< coeff_t > offset(coeff_t r)
Definition: fatarcs.hpp:221
T pow(const T &a, int i)
Definition: binomials.hpp:12
vec_t pts[3]
Definition: fatarcs.hpp:131
TMPL Polynomial diff(const Polynomial &pol, int v)
Multivariate Polynomial Differentiation.
Definition: polynomial_fcts.hpp:99
dynamic_exp< E >::degree_t degree(const dynamic_exp< E > &t)
Definition: dynamicexp.hpp:191
domain(int_t intxy)
Definition: fatarcs.hpp:36
C abs_max_coeff(polynomial< C, with< Bernstein > > poly)
Definition: fatarcs_fcts.hpp:248
domain(int n)
Definition: fatarcs.hpp:35
coeff_t max_eval(arc_rep_t circ)
Definition: fatarcs.hpp:437
bool edge_event(int var, int n)
Definition: fatarcs.hpp:349
Result eval(const Polynomial &polynomial, const Parameters &parameters)
Multivariate Polynomial Evaluation.
Definition: polynomial_fcts.hpp:135
void print(int digits)
Definition: fatarcs.hpp:83
std::vector< coeff_t > vec_t
Definition: fatarcs.hpp:123
polynomial< coeff_t,with< MonomialTensor > > monom_t
Definition: fatarcs.hpp:314
R & rep(R &r)
Definition: shared_object.hpp:180
domain< coeff_t > box_t
Definition: fatarcs.hpp:125
std::vector< C > rotl(std::vector< C > p)
Definition: fatarcs_fcts.hpp:32
Definition: fatarcs.hpp:307
self_t & clear()
Definition: Seq.hpp:117
void restrict(bernstein< C > &rst, int v, const T &a, const T &b)
Definition: tensor_bernstein_fcts.hpp:347
Definition: fatarcs.hpp:23
void split(domain< C > *ch)
Definition: fatarcs.hpp:91
std::vector< coeff_t > vec_t
Definition: fatarcs.hpp:311
std::vector< C > vec_t
Definition: fatarcs.hpp:27
Seq< coeff_t > seq_t
Definition: fatarcs.hpp:124
bool is_arc(arc_rep< C > c)
Definition: fatarcs_fcts.hpp:415
void mul(Interval< C, r > &a, const C &x)
Definition: Interval_fcts.hpp:259
void assign(monomials< C > &monoms, const bernstein< C > &controls)
Definition: tensor_bernstein_fcts.hpp:267
domain()
Definition: fatarcs.hpp:34
int first_nonzero(bernstein_t list, int e)
Definition: fatarcs.hpp:370
C min_coeff(polynomial< C, with< Bernstein > > poly)
Definition: fatarcs_fcts.hpp:217
void eval(Result &result, const bernstein< Coeff > &controls, const Parameters &parameters)
Definition: tensor_bernstein_fcts.hpp:195
std::vector< C > v_div(std::vector< C > p, C q)
Definition: fatarcs_fcts.hpp:66
size_type size() const
Definition: Seq.hpp:166
box_t box
Definition: fatarcs.hpp:318
coeff_t weight()
Definition: fatarcs.hpp:152
seqint_t I
Definition: fatarcs.hpp:31
C coeff_t
Definition: fatarcs.hpp:122
seq_t arc_eq()
Definition: fatarcs.hpp:173
#define TODOUBLE
Definition: fatarcs.hpp:16
vec_t llc()
Definition: fatarcs.hpp:54
bool is_small(C p)
Definition: fatarcs_fcts.hpp:110
box_rep(bernstein_t p)
Definition: fatarcs.hpp:323
Seq< C > delta()
Definition: fatarcs.hpp:76
vec_t critpt(int var)
Definition: fatarcs.hpp:191
TMPL void face(Polynomial &r, const Polynomial &p, int v, int f)
Definition: polynomial_fcts.hpp:188
Seq< C > solve2(C a, C b, C c)
Definition: fatarcs_fcts.hpp:124
Definition: polynomial.hpp:37
ZZ size(const ZZ &z)
Definition: GMPXX.hpp:67
polynomial< coeff_t,with< MonomialTensor > > monom_t
Definition: fatarcs.hpp:127
arc_rep< coeff_t > arc_rep_t
Definition: fatarcs.hpp:315
void heval(Result &result, const monomials< Coeff > &monoms, const Parameters &parameters)
Definition: tensor_monomials_fcts.hpp:148
C diam()
Definition: fatarcs.hpp:47
domain(int_t intx, int_t inty)
Definition: fatarcs.hpp:37
scalar< T > sqrt(const scalar< T > &b)
Definition: scalar.hpp:501
arc_rep(vec_t p[3])
Definition: fatarcs.hpp:143
vec_t midc()
Definition: fatarcs.hpp:157
bool is_unit1(C p)
Definition: fatarcs_fcts.hpp:138
std::vector< C > vec(const C c1, const C c2)
Definition: fatarcs_fcts.hpp:25
domain< coeff_t > box_t
Definition: fatarcs.hpp:312
C dot(std::vector< C > p, std::vector< C > q)
Definition: fatarcs_fcts.hpp:37
polynomial< coeff_t,with< Bernstein > > bernstein_t
Definition: fatarcs.hpp:313
vec_t urc()
Definition: fatarcs.hpp:61
Generic class for intervals.
Definition: Interval.hpp:44
arc_rep(vec_t p0, vec_t p1, vec_t p2)
Definition: fatarcs.hpp:137
polynomial< coeff_t,with< Bernstein > > bernstein_t
Definition: fatarcs.hpp:126
Definition: fatarcs.hpp:119
double C
Definition: solver_mv_fatarcs.cpp:16
coeff_t min_grad()
Definition: fatarcs.hpp:420
std::vector< C > matrat(std::vector< C > v1, std::vector< C > v2)
Definition: fatarcs_fcts.hpp:89
vec_t center()
Definition: fatarcs.hpp:68
int sign(const QQ &a)
Definition: GMP.hpp:60
C dim()
Definition: fatarcs.hpp:40
bernstein_t poly
Definition: fatarcs.hpp:319
Seq< Interval< C > > seqint_t
Definition: fatarcs.hpp:26
void assign(A &a, const B &b)
Generic definition of the assignement function.
Definition: assign.hpp:97
C max_coeff(polynomial< C, with< Bernstein > > poly)
Definition: fatarcs_fcts.hpp:232
std::vector< C > v_plus(std::vector< C > p, std::vector< C > q)
Definition: fatarcs_fcts.hpp:46
C v_length(std::vector< C > p)
Definition: fatarcs_fcts.hpp:84
Seq< vec_t > event_list()
Definition: fatarcs.hpp:404
Definition: array.hpp:12
void add(dynamic_exp< E > &r, const dynamic_exp< E > &A, const dynamic_exp< E > &B)
Definition: dynamicexp.hpp:295
polynomial< C,with< Bernstein > > seq2b(Seq< C > coeffseq)
Definition: fatarcs_fcts.hpp:190
std::vector< C > v_minus(std::vector< C > p, std::vector< C > q)
Definition: fatarcs_fcts.hpp:56
Interval< C > int_t
Definition: fatarcs.hpp:25
box_rep(bernstein_t p, box_t bb)
Definition: fatarcs.hpp:324
arc_rep()
Definition: fatarcs.hpp:135
Home