#include namespace icl{ template RestrictedEllipseModel::RestrictedEllipseModel():QuadraticModel(5){ } template T RestrictedEllipseModel::px(T y) const{ // return c/a; return (*this)[2]/(*this)[0]; } // real p = c/a; // real q = (b*y*y+d*y+e)/a; template T RestrictedEllipseModel::qx(T y) const{ // return (b*y*y+d*y+e)/a; return ((*this)[1]*y*y+(*this)[3]*y+(*this)[4])/(*this)[0]; } template T RestrictedEllipseModel::py(T x) const{ // return d/b; return (*this)[3]/(*this)[1]; } template T RestrictedEllipseModel::qy(T x) const{ // return (a*x*x+c*x+e)/b; return ((*this)[0]*x*x+(*this)[2]*x+(*this)[4])/(*this)[1]; } template void RestrictedEllipseModel::features(T x,T y, T *dst) const{ dst[0] = x*x; dst[1] = y*y; dst[2] = x; dst[3] = y; dst[4] = 1; } template void RestrictedEllipseModel::center(T &x, T &y) const{ // x=-c/(2a) // y=-d/(2b) const RestrictedEllipseModel &M=*this; x = -M[2]/(2*M[0]); y = -M[3]/(2*M[1]); } template class RestrictedEllipseModel; template class RestrictedEllipseModel; }