12 template <
typename Po
intPairContainer>
    14         typedef typename PointPairContainer::const_iterator ContainerIterator;
    15         PointPair mean=std::make_pair(
Point(0.,0.), 
Point(0.,0.));
    17         for (ContainerIterator it=container.begin(); it!=container.end(); it++){
    18                 mean.first=mean.first+it->first;
    19                 mean.second=mean.second+it->second;
    22         mean.first=mean.first*(1./size);
    23         mean.second=mean.second*(1./size);
    24         double sxx=0, sxy=0, syx=0, syy=0;
    26         for (ContainerIterator it=container.begin(); it!=container.end(); it++){
    27                 PointPair mf=std::make_pair(it->first-mean.first, it->second-mean.second);
    28                 sxx+=mf.first.x*mf.second.x;
    29                 sxy+=mf.first.x*mf.second.y;
    30                 syx+=mf.first.y*mf.second.x;
    31                 syy+=mf.first.y*mf.second.y;
    33         retval.
theta=atan2(sxy-syx, sxx+sxy);
    35         retval.
x=mean.second.x-(
c*mean.first.x-s*mean.first.y);
    36         retval.
y=mean.second.y-(s*mean.first.x+
c*mean.first.y);
    39         for (ContainerIterator it=container.begin(); it!=container.end(); it++){
    41                         c*it->first.x-s*it->first.y+retval.
x-it->second.x, s*it->first.x+
c*it->first.y+retval.
y-it->second.y);
    47 template <
typename Po
intPairContainer>
    49         typedef typename PointPairContainer::const_iterator ContainerIterator;
    50         PointPair mean=std::make_pair(
Point(0.,0.), 
Point(0.,0.));
    52         for (ContainerIterator it=container.begin(); it!=container.end(); it++){
    53                 mean.first=mean.first+it->first;
    54                 mean.second=mean.second+it->second;
    58         mean.first=mean.first*(1./size);
    59         mean.second=mean.second*(1./size);
    62         for (ContainerIterator it=container.begin(); it!=container.end(); it++){
    63                 PointPair mf=std::make_pair(it->first-mean.first, it->second-mean.second);
    64                 double  dalpha=atan2(mf.second.y, mf.second.x) - atan2(mf.first.y, mf.first.x);
    65                 double gain=sqrt(mean.first*mean.first);
    69         retval.
theta=atan2(ms, mc);
    71         retval.
x=mean.second.x-(
c*mean.first.x-s*mean.first.y);
    72         retval.
y=mean.second.y-(s*mean.first.x+
c*mean.first.y);
    75         for (ContainerIterator it=container.begin(); it!=container.end(); it++){
    77                         c*it->first.x-s*it->first.y+retval.
x-it->second.x, s*it->first.x+
c*it->first.y+retval.
y-it->second.y);
 const char *const  *argv double delta
std::pair< Point, Point > PointPair
double icpStep(OrientedPoint &retval, const PointPairContainer &container)
double icpNonlinearStep(OrientedPoint &retval, const PointPairContainer &container)