realroot_doc 0.1.1
/Users/mourrain/Devel/mmx/realroot/include/realroot/fatarcs_fcts.hpp File Reference
#include <vector>
#include <realroot/Interval.hpp>
#include <realroot/Seq.hpp>

Go to the source code of this file.

Defines

Functions


Define Documentation

#define REP   poly.rep()

Definition at line 5 of file fatarcs_fcts.hpp.

Referenced by max_coeff(), min_coeff(), and pint().

#define SIZE   poly.size()

Definition at line 6 of file fatarcs_fcts.hpp.

Referenced by max_coeff(), min_coeff(), and pint().

#define SMALL   C(10e-20)

Definition at line 4 of file fatarcs_fcts.hpp.


Function Documentation

C abs_max_coeff ( polynomial< C, with< Bernstein > >  poly)

Definition at line 239 of file fatarcs_fcts.hpp.

References mmx::max(), max_coeff(), mmx::min(), and min_coeff().

Referenced by box_rep< C >::max_eval().

                                                       {
  C min =min_coeff(poly);
  C max =max_coeff(poly);

  if( max*max < min*min){ max =C(-1)*min; };
 
  return max;
};/* max abs coeff*/
std::vector<C> approx ( polynomial< C, with< Bernstein > >  poly,
std::vector< C >  ep1,
std::vector< C >  ep2,
int  MTH 
)
Examples:
solver_uv_inewton_test.cpp.

Definition at line 267 of file fatarcs_fcts.hpp.

References mmx::tensor::assign(), mmx::tensor::eval(), is_unit1(), mmx::mul(), pint(), seq2b(), solve2(), and vec().

Referenced by interval_newton< INT, CT >::bisection_iteration(), median(), and interval_newton< INT, CT >::newton_iteration().

                                                                                                        {
  polynomial< C ,with<MonomialTensor> > xt, yt, res, monp, mp("x0-x0^2");
  polynomial< C ,with<Bernstein> > bxt, byt; 
    C t, I; 
    Seq<C> sols;
    std::vector<C> movec;
   
    if (ep2.size()==0 ){movec=ep1;}
    else{ 
 tensor::assign(monp.rep(),poly.rep());
   
 Seq<C> endptsx,endptsy;

    endptsx<<ep2[0]<<ep1[0];
    endptsy<<ep2[1]<<ep1[1];
    bxt=seq2b(endptsx); tensor::assign(xt.rep(),bxt.rep());
    byt=seq2b(endptsy); tensor::assign(yt.rep(),byt.rep());
       
    Seq<polynomial< C ,with<MonomialTensor> > > param; param<<xt<<yt;

    tensor::eval(res, monp.rep(), param, 1);
  

   
  C c0,c1;
  tensor::eval(c0,res.rep(),C(0));
  tensor::eval(c1,res.rep(),C(1));
  mul(res,mp);

   I=pint(res);
   C u=C(15)*I-C(0.75)*(c0+c1);
   sols=solve2(c0+c1-C(2)*u,C(2)*(u-c0),c0);
 

   if(is_unit1(sols[0]))
     {t=sols[0]; movec=vec(ep1[0]*t+ep2[0]*(C(1)-t),ep1[1]*t+ep2[1]*(C(1)-t));}
   else if(is_unit1(sols[1]))
     {t=sols[1]; movec=vec(ep1[0]*t+ep2[0]*(C(1)-t),ep1[1]*t+ep2[1]*(C(1)-t));}
   else{movec=std::vector<C>();}

    }
 
   return movec;
  }; /*approx bivar bbpoly along line*/
polynomial< C ,with<Bernstein> > bbasis ( co,
int  n,
int  deg 
)

Definition at line 159 of file fatarcs_fcts.hpp.

References mmx::binomial(), and mmx::mul().

Referenced by seq2b().

  {
    polynomial< C ,with<Bernstein> > ti(co*C(binomial(n,deg)),deg,0), t("1-x0"), tj(C(1),0,0); 

    for(int i=0; i<n-deg; i++){ mul(tj,t); }; 

    mul(ti, tj);
    return(ti);
  }/*BB basis polynomials*/
int binomial ( int  n,
int  p 
)

Definition at line 145 of file fatarcs_fcts.hpp.

                           {
   int n1=1;
   if(p!=0) {

     if((n-p)<p){ p=n-p;};
     int n2=n;
     for(int i=1;i<=p;i++){ n1=n1*n2/i; n2--;};
    }
 
    return(n1);
}/*binomials*/
void circ_is ( std::vector< C > *  ispts,
arc_rep< C >  c1,
arc_rep< C >  c2 
)

Definition at line 360 of file fatarcs_fcts.hpp.

References arc_rep< C >::arc_eq(), is_small(), solve2(), and vec().

Referenced by extpts().

                                                                   {

    Seq<C> eh1= c1.arc_eq(), eh2= c2.arc_eq(), sx, a;    
    C Aeh,Ceh; 
   if(!is_small(eh1[1]) && !is_small(eh1[2]) && !is_small(eh2[1]) && !is_small(eh2[2])){

    if(is_small(eh1[0]) && is_small(eh2[0])){

      Aeh=(C(-1)*eh2[1])/(eh2[2]); 
      Ceh=(C(-1)*eh2[3])/(eh2[2]);
      sx[0]=(C(-1)*eh1[2]*Ceh-eh1[3])/(eh1[2]*Aeh+eh1[1]);
        
          ispts[0]=vec(sx[0],Aeh*sx[0]+Ceh);
          ispts[1]=vec(sx[0],Aeh*sx[0]+Ceh);
      }
    else{
      if(!is_small(eh1[0]) && !is_small(eh2[0])){
        eh1=eh1/eh1[0];
        eh2=eh2/eh2[0];

        Aeh=(eh2[1]-eh1[1])/(eh1[2]-eh2[2]);
        Ceh=(eh2[3]-eh1[3])/(eh1[2]-eh2[2]);}   
      else{
        if(is_small(eh1[0]) && !is_small(eh2[0])){a=eh1; eh1=eh2; eh2=a;};
      
        eh1=eh1/eh1[0];

        Aeh=(C(-1)*eh2[1])/(eh2[2]); 
        Ceh=(C(-1)*eh2[3])/(eh2[2]);};
 


      sx=solve2(C(1)+Aeh*Aeh, C(2)*Aeh*Ceh+eh1[1]+eh1[2]*Aeh, Ceh*Ceh+eh1[2]*Ceh+eh1[3]);
         
      ispts[0]=vec(sx[0],Aeh*sx[0]+Ceh);
      ispts[1]=vec(sx[1],Aeh*sx[1]+Ceh); 
    
    }
   }
   else{  ispts[0]=vec(C(-1),C(-1));
     ispts[1]=vec(C(-1),C(-1)); 
   };
};/*cicrcle intersections (numerical behaviour!)*/
Seq<C> corner_values ( polynomial< C, with< Bernstein > >  p)

Definition at line 251 of file fatarcs_fcts.hpp.

References mmx::eval(), and vec().

                                                        {
  C c00,c10,c01,c11;

  eval( c00, p.rep(),  vec(C(0),C(0)) );
  eval( c10, p.rep(),  vec(C(1),C(0)) );
  eval( c01, p.rep(),  vec(C(0),C(1)) );
  eval( c11, p.rep(),  vec(C(1),C(1)) );
  Seq<C> cval; cval<<c00<<c10<<c01<<c11;
  return(cval);

};
std::vector<C> crossrat ( std::vector< C >  v1,
std::vector< C >  v2,
std::vector< C >  v3,
std::vector< C >  v4 
)

Definition at line 86 of file fatarcs_fcts.hpp.

References matrat(), and v_minus().

Referenced by is_infatarc().

                                                                                      { 
  std::vector<C> mm=matrat(matrat(v_minus(v1,v2),v_minus(v3,v2)),matrat(v_minus(v1,v4),v_minus(v3,v4))); 
return(mm);
};
C dot ( std::vector< C >  p,
std::vector< C >  q 
)

Definition at line 28 of file fatarcs_fcts.hpp.

Referenced by arc_rep< C >::arc_eq(), arc_rep< C >::midc(), v_length(), and arc_rep< C >::weight().

                                     {
  C v=C(0);
 for(unsigned i=0; i<p.size(); i++){
   v +=p[i]*q[i];
 } 
return(v);
};
Seq< std::vector<C> > extpts ( arc_rep< C >  mc1,
r1,
arc_rep< C >  mc2,
r2 
)

Definition at line 423 of file fatarcs_fcts.hpp.

References circ_is(), arc_rep< C >::critpt(), is_arc(), is_infatarc(), is_unit2(), arc_rep< C >::offset(), arc_rep< C >::pts, Seq< C, R >::size(), and vec().

Referenced by solver_mv_fatarcs< C >::box_gen().

                                                                      {

  arc_rep<C>
  c1p=mc1.offset(r1),c1m=mc1.offset(C(-1)*r1),
  c2p=mc2.offset(r2),c2m=mc2.offset(C(-1)*r2);
  std::vector<C> p[2];
  Seq< std::vector<C> > ispts;

  if(is_arc(c1p) && is_arc(c2p)){ circ_is(p,c1p,c2p); if(is_unit2(p[0])){ispts<<p[0];}; if(is_unit2(p[1])){ispts<<p[1];};};
  if(is_arc(c1p) && is_arc(c2m)){ circ_is(p,c1p,c2m); if(is_unit2(p[0])){ispts<<p[0];}; if(is_unit2(p[1])){ispts<<p[1];};};
  if(is_arc(c1m) && is_arc(c2m)){ circ_is(p,c1m,c2m); if(is_unit2(p[0])){ispts<<p[0];}; if(is_unit2(p[1])){ispts<<p[1];};};
  if(is_arc(c1m) && is_arc(c2p)){ circ_is(p,c1m,c2p); if(is_unit2(p[0])){ispts<<p[0];}; if(is_unit2(p[1])){ispts<<p[1];};};
 
  if(is_arc(c1p) && is_infatarc(c1p.pts[0],c2m,c2p)){ispts<<c1p.pts[0];};
  if(is_arc(c1p) && is_infatarc(c1p.pts[2],c2m,c2p)){ispts<<c1p.pts[2];};
  if(is_arc(c1m) && is_infatarc(c1m.pts[0],c2m,c2p)){ispts<<c1m.pts[0];};
  if(is_arc(c1m) && is_infatarc(c1m.pts[2],c2m,c2p)){ispts<<c1m.pts[2];};

  if(is_arc(c2p) && is_infatarc(c2p.pts[0],c1m,c1p)){ispts<<c2p.pts[0];};
  if(is_arc(c2p) && is_infatarc(c2p.pts[2],c1m,c1p)){ispts<<c2p.pts[2];};
  if(is_arc(c2m) && is_infatarc(c2m.pts[0],c1m,c1p)){ispts<<c2m.pts[0];};
  if(is_arc(c2m) && is_infatarc(c2m.pts[2],c1m,c1p)){ispts<<c2m.pts[2];};
 
  if(is_arc(c1p) && is_infatarc(c1p.critpt(0),c2m,c2p)){ispts<<c1p.critpt(0);}; 
  if(is_arc(c1p) && is_infatarc(c1p.critpt(1),c2m,c2p)){ispts<<c1p.critpt(1);}; 
  if(is_arc(c1m) && is_infatarc(c1m.critpt(0),c2m,c2p)){ispts<<c1m.critpt(0);}; 
  if(is_arc(c1m) && is_infatarc(c1m.critpt(1),c2m,c2p)){ispts<<c1m.critpt(1);}; 

  if(is_arc(c2p) && is_infatarc(c2p.critpt(0),c1m,c1p)){ispts<<c2p.critpt(0);}; 
  if(is_arc(c2p) && is_infatarc(c2p.critpt(1),c1m,c1p)){ispts<<c2p.critpt(1);}; 
  if(is_arc(c2m) && is_infatarc(c2m.critpt(0),c1m,c1p)){ispts<<c2m.critpt(0);}; 
  if(is_arc(c2m) && is_infatarc(c2m.critpt(1),c1m,c1p)){ispts<<c2m.critpt(1);};

  
  Seq< std::vector<C> > cpts; cpts<<vec(C(0),C(0));cpts<<vec(C(0),C(1));cpts<<vec(C(1),C(0));cpts<<vec(C(1),C(1));

  for(unsigned i=0; i<cpts.size(); i++){ if( is_infatarc(cpts[i],c1m,c1p) && 
                                              is_infatarc(cpts[i],c2m,c2p) ){ ispts<<cpts[i]; };
    }; 
 
  return ispts;
};
bool is_arc ( arc_rep< C >  c)

Definition at line 406 of file fatarcs_fcts.hpp.

References arc_rep< C >::pts.

Referenced by solver_mv_fatarcs< C >::box_gen(), extpts(), is_infatarc(), and arc_rep< C >::offset().

                          {
    if( c.pts[0].size()!=0 && c.pts[1].size()!=0 && c.pts[2].size()!=0 ){return true;}
  else{return false;}
};
bool is_infatarc ( std::vector< C >  p,
arc_rep< C >  c1,
arc_rep< C >  c2 
)

Definition at line 413 of file fatarcs_fcts.hpp.

References crossrat(), is_arc(), and arc_rep< C >::pts.

Referenced by extpts().

                                                               {
  if(is_arc(c1)&&is_arc(c2)){
    if( crossrat(c1.pts[2],c1.pts[1],c1.pts[0],p)[1]*crossrat(c2.pts[2],c2.pts[1],c2.pts[0],p)[1]<C(0))
      {return true;}else{return false;}
  }
  else{return false;}
};
bool is_small ( p)

Definition at line 101 of file fatarcs_fcts.hpp.

Referenced by circ_is(), box_rep< C >::corner_event(), median(), and solve2().

                  {
  if(p==C(0)){return true;}
  else{return false;}
  };
bool is_unit1 ( p)

Definition at line 129 of file fatarcs_fcts.hpp.

Referenced by approx(), arc_rep< C >::critpt(), is_unit2(), median(), and arc_rep< C >::offset().

                  {
  if(p<C(0) || p>C(1) ){return false;}
  else{return true;}
};/*1dim unit test*/
bool is_unit2 ( std::vector< C >  p)

Definition at line 136 of file fatarcs_fcts.hpp.

References is_unit1().

Referenced by extpts().

                              {
  if( is_unit1( p[0] ) && is_unit1( p[1] ) ){return true;}
  else{return false;}
};/*2dim unit test*/
bool is_zero ( p)

Definition at line 95 of file fatarcs_fcts.hpp.

                 {
  if(p==C(0)){return true;}
  else{return false;}
  };
std::vector<C> matrat ( std::vector< C >  v1,
std::vector< C >  v2 
)

Definition at line 80 of file fatarcs_fcts.hpp.

References vec().

Referenced by arc_rep< C >::arc_eq(), arc_rep< C >::arc_rep(), and crossrat().

                                                    {
  std::vector<C> mm; mm=vec(v1[0]*v2[0]+v1[1]*v2[1],v1[0]*v2[1]-v2[0]*v1[1]); 
  return(mm);
};
C max_coeff ( polynomial< C, with< Bernstein > >  poly)

Definition at line 223 of file fatarcs_fcts.hpp.

References mmx::max(), REP, and SIZE.

Referenced by abs_max_coeff(), and box_rep< C >::not_empty().

                                                   {

  C max =REP[0];

  for ( unsigned i = 1; i < SIZE; i++ ){
    if( max < REP[i] ){ 
      max = REP[i];
    }

  }
  return max;
};/*max coeff*/
arc_rep< C > median ( box_rep< C >  box,
Seq< std::vector< C > >  list,
int  MTH 
)

Definition at line 314 of file fatarcs_fcts.hpp.

References approx(), is_small(), is_unit1(), box_rep< C >::poly, rotl(), mmx::size(), v_div(), v_minus(), v_plus(), and vec().

                                                                          {
  std::vector<C> endp[2], mpts[3];
  int s=0;
  arc_rep<C> medc;
  for(int i=0; i<3; i++){mpts[i]=std::vector<C>();};

  
  mpts[0]=approx(box.poly, list[0], list[1], MTH);
  mpts[1]=approx(box.poly, list[2], list[3], MTH);
 
    if( mpts[0].size()!=0 && mpts[1].size()!=0 ){
     
      std::vector<C> mid, rvec, v; 
      mid=v_div(v_plus(mpts[0],mpts[1]),C(2));
      rvec=rotl(v_minus(mpts[0],mpts[1])); 
       C bval[4]; 
    
       if(!is_small(rvec[0])){  
         bval[0]=rvec[1]*C(-1)*mid[0]/rvec[0]+mid[1];
         bval[1]=rvec[1]*(C(1)-mid[0])/rvec[0]+mid[1];}else{ bval[0]=C(-1); bval[1]=C(-1);}

       if(!is_small(rvec[1])){ 
         bval[2]=rvec[0]*C(-1)*mid[1]/rvec[1]+mid[0];
         bval[3]=rvec[0]*(C(1)-mid[1])/rvec[1]+mid[0];}else{ bval[2]=C(-1); bval[3]=C(-1);}
   
       if(is_unit1(bval[0]) && s<2){endp[s]= vec(C(0),bval[0]); s++;};
       if(is_unit1(bval[1]) && s<2){endp[s]= vec(C(1),bval[1]); s++;};
       if(is_unit1(bval[2]) && s<2){endp[s]= vec(bval[2],C(0)); s++;};
       if(is_unit1(bval[3]) && s<2){endp[s]= vec(bval[3],C(1)); s++;};
       mpts[2]=mpts[1]; 
  
       if(s==2){ mpts[1]=approx(box.poly, endp[0], endp[1], MTH);}

       if(mpts[1].size()!=0){ medc=arc_rep<C>(mpts);}else{medc=arc_rep<C>();}
       //else{ for(int i=0; i<3; i++){mpts[i]= vec(C(-1),C(-1));};}
      
    }else{ medc=arc_rep<C>(); };


    //std::cout <<"med: "<<mpts[0]<<" "<<mpts[1]<<" "<<mpts[2]<<std::endl;
   
     return(medc);
     }; /*median arc computation*/
C min_coeff ( polynomial< C, with< Bernstein > >  poly)

Definition at line 208 of file fatarcs_fcts.hpp.

References mmx::min(), REP, and SIZE.

Referenced by abs_max_coeff(), box_rep< C >::max_eval(), box_rep< C >::min_grad(), and box_rep< C >::not_empty().

                                                   {

  C  min =REP[0];

  for ( unsigned i = 1; i < SIZE; i++ ){
    if( min > REP[i] ){ 
      min = REP[i];
    }

  }
  return min;
};/*minimal coeff*/
domain<C> minmax_box ( Seq< std::vector< C > >  ispts,
domain< C >  box 
)

Definition at line 467 of file fatarcs_fcts.hpp.

References domain< C >::delta(), and domain< C >::I.

Referenced by solver_mv_fatarcs< C >::box_gen().

                                                             {
  domain<C> newbox=box;
  C minx,maxx,miny,maxy;
  if(ispts.size()==0){newbox=domain<C>(int(0));}else{
  int k=0;
  for(unsigned i=0; i<ispts.size(); i++){
      if(k==0){ minx=ispts[i][0]; maxx=ispts[i][0]; miny=ispts[i][1]; maxy=ispts[i][1]; k++;};
      if(ispts[i][0]>maxx){maxx=ispts[i][0];};
      if(ispts[i][0]<minx){minx=ispts[i][0];};
      if(ispts[i][1]>maxy){maxy=ispts[i][1];};
      if(ispts[i][1]<miny){miny=ispts[i][1];};
  }; 

  Interval<C>  Jx( minx, maxx), Jy( miny, maxy) ;
   if((maxx-minx)>C(0) && (maxy-miny)>C(0))
     { newbox= domain<C>( box.I[0].m + box.delta()[0]*Jx ,  box.I[1].m + box.delta()[1]*Jy ); };
  }
  return(newbox);
};/*minmax box for the arc  intersection points and arc end points*/
C pint ( polynomial< C, with< MonomialTensor > >  poly)

Definition at line 195 of file fatarcs_fcts.hpp.

References REP, and SIZE.

Referenced by approx().

  {
    int n=SIZE;
    C res=C(0);     

    for(int i=0; i<n; i++ ){
      res += REP[i]/C(i+1) ;}

    return(res);
  };/*poly integration on (0,1)*/
void pow ( polynomial< C, with< Bernstein > > &  poly,
int  n 
)

Definition at line 171 of file fatarcs_fcts.hpp.

References mmx::mul().

  {
    polynomial< C ,with<Bernstein> > t=poly;

    for(int i=1; i<n; i++){ mul(poly, t); }; 
  }/*nth power of a bbpoly*/
std::vector<C> rotl ( std::vector< C >  p)

Definition at line 23 of file fatarcs_fcts.hpp.

References vec().

Referenced by median(), arc_rep< C >::midc(), and arc_rep< C >::offset().

                                 {
  std::vector<C> v; v=vec(C(-1)*p[1],p[0]); return(v);
};       /*rotate left*/
polynomial< C ,with<Bernstein> > seq2b ( Seq< C >  coeffseq)

Definition at line 181 of file fatarcs_fcts.hpp.

References mmx::add(), bbasis(), and Seq< C, R >::size().

Referenced by approx(), arc_rep< C >::critpt(), and box_rep< C >::max_eval().

  { 
    int n=coeffseq.size()-1;
    polynomial<  C ,with<Bernstein> > pol, pi;

    for(int i=0; i<=n; i++ ){
      pi=bbasis(coeffseq[i],n,i); 
      add( pol , pi);}

    return(pol);
  };/*coeff vector -> bbpoly*/
Seq<C> solve2 ( a,
b,
c 
)

Definition at line 115 of file fatarcs_fcts.hpp.

References is_small(), mmx::sign(), and mmx::sqrt().

Referenced by approx(), circ_is(), and arc_rep< C >::offset().

                            {
  Seq<C> r; r<<C(-1)<<C(-1);  
  C root1,root2;  
  if(is_small(a)){if(!is_small(b)){r[0]=C(-1)*c/b;r[1]=C(-1)*c/b;}}
  else{if(sign(b*b-C(4)*a*c) >= 0){
      root1=(C(-1)*b+sqrt(b*b-C(4)*a*c))/(C(2)*a);
      root2=(C(-1)*b-sqrt(b*b-C(4)*a*c))/(C(2)*a);
      r[0]=root1;r[1]=root2;}
    }
 
  return(r);
};/*solve(a*x^2+b*x+c=0)*/
std::vector<C> v_div ( std::vector< C >  p,
q 
)

Definition at line 57 of file fatarcs_fcts.hpp.

Referenced by median(), arc_rep< C >::midc(), and arc_rep< C >::offset().

                                       {
  if (q!=C(0)){
    std::vector<C>  v(p.size(),C(0));
    for(unsigned i=0; i<p.size(); i++){
      v[i]=p[i]/q;}; 
    return(v);}else{return std::vector<C>();}
};
C v_length ( std::vector< C >  p)

Definition at line 75 of file fatarcs_fcts.hpp.

References dot(), and mmx::sqrt().

Referenced by arc_rep< C >::offset(), and arc_rep< C >::weight().

                          {
  return(sqrt(dot(p,p)));
};   /*length of vector*/
std::vector<C> v_minus ( std::vector< C >  p,
std::vector< C >  q 
)

Definition at line 47 of file fatarcs_fcts.hpp.

References assert.

Referenced by arc_rep< C >::arc_eq(), arc_rep< C >::arc_rep(), crossrat(), median(), arc_rep< C >::midc(), arc_rep< C >::offset(), and arc_rep< C >::weight().

                                                    {
  std::vector<C> v(p.size(),C(0));
  assert( p.size()==q.size() );
 for(unsigned i=0; i<p.size(); i++){
   v[i]=p[i]-q[i];
 } 
return(v);
};
std::vector<C> v_mul ( q,
std::vector< C >  p 
)

Definition at line 66 of file fatarcs_fcts.hpp.

Referenced by arc_rep< C >::midc(), and arc_rep< C >::offset().

                                       {
  std::vector<C>  v(p.size(),C(0));
 for(unsigned i=0; i<p.size(); i++){
   v[i]=p[i]*q;
 } 
return(v);
};
std::vector<C> v_plus ( std::vector< C >  p,
std::vector< C >  q 
)

Definition at line 37 of file fatarcs_fcts.hpp.

References assert.

Referenced by median(), arc_rep< C >::midc(), and arc_rep< C >::offset().

                                                   {
  std::vector<C> v(p.size(),C(0));
 assert( p.size()==q.size() );
 for(unsigned i=0; i<p.size(); i++){
   v[i]=p[i]+q[i];
 } 
return(v);
};
std::vector<C> vec ( const C  c1,
const C  c2 
)

Definition at line 16 of file fatarcs_fcts.hpp.

Referenced by approx(), arc_rep< C >::arc_eq(), circ_is(), box_rep< C >::corner_event(), corner_values(), arc_rep< C >::critpt(), box_rep< C >::event_list(), extpts(), matrat(), median(), arc_rep< C >::offset(), and rotl().

                                          {
  std::vector<C> a(2, C(0));
   a[0]= c1; a[1]= c2;
  return a;
}