// (c) Tuomas J. Lukka #ifndef VOB_SCALARFUNCS_HXX #define VOB_SCALARFUNCS_HXX #ifndef VOB_PRIMITIVETRANS_DEFINED #define VOB_PRIMITIVETRANS_DEFINED(x, n) #endif #include namespace Vob { namespace Primitives { /** A 1-dimensional rational function, second degree in * both numerator and denominator. */ class Rational1D_2_2 : public PrimitiveTransform { public: float coeff[6]; void tr(const ZPt &from, ZPt &to) const { to.y = 0; to.z = 0; double x = from.x; double x2 = from.x * from.x; to.x = (coeff[0] + coeff[1]*x + coeff[2]*x2) / (coeff[3] + coeff[4]*x + coeff[5]*x2) ; } }; class Rational1D_2_2_Explicit : public Rational1D_2_2, public ParametrizedPrimitiveTransform, public NonInvertiblePrimitiveTransform { public: enum { NParams = 6 }; template void setParams(Ptr p) { for(int i=0; i<6; i++) coeff[i] = p[i]; } }; VOB_PRIMITIVETRANS_DEFINED(Rational1D_2_2_Explicit, "rational1D22"); } } #endif