⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 polynomial.h

📁 很多二维 三维几何计算算法 C++ 类库
💻 H
📖 第 1 页 / 共 5 页
字号:
// SPECIALIZING pure int params:  // lefthand side  template <class NT>    Polynomial<NT> operator +   (const int& num, const Polynomial<NT>& p2)  { return (Polynomial<NT>(num) + p2); }  template <class NT>    Polynomial<NT> operator -   (const int& num, const Polynomial<NT>& p2)  { return (Polynomial<NT>(num) - p2); }  template <class NT>    Polynomial<NT> operator *   (const int& num, const Polynomial<NT>& p2)  { return (Polynomial<NT>(num) * p2); }  template <class NT>    Polynomial<NT> operator /   (const int& num, const Polynomial<NT>& p2)  { return (Polynomial<NT>(num)/p2); }  template <class NT>    Polynomial<NT> operator %   (const int& num, const Polynomial<NT>& p2)  { return (Polynomial<NT>(num)%p2); }  // righthand side  template <class NT>    Polynomial<NT> operator +   (const Polynomial<NT>& p1, const int& num)  { return (p1 + Polynomial<NT>(num)); }  template <class NT>    Polynomial<NT> operator -   (const Polynomial<NT>& p1, const int& num)  { return (p1 - Polynomial<NT>(num)); }  template <class NT>    Polynomial<NT> operator *   (const Polynomial<NT>& p1, const int& num)  { return (p1 * Polynomial<NT>(num)); }  template <class NT>    Polynomial<NT> operator /   (const Polynomial<NT>& p1, const int& num)  { return (p1 / Polynomial<NT>(num)); }  template <class NT>    Polynomial<NT> operator %   (const Polynomial<NT>& p1, const int& num)  { return (p1 % Polynomial<NT>(num)); }  // lefthand side  template <class NT>    bool operator ==    (const int& num, const Polynomial<NT>& p)   { return ( (Polynomial<NT>(num)-p).sign() == CGAL::ZERO );}  template <class NT>    bool operator !=   (const int& num, const Polynomial<NT>& p)   { return ( (Polynomial<NT>(num)-p).sign() != CGAL::ZERO );}  template <class NT>    bool operator <    (const int& num, const Polynomial<NT>& p)   { return ( (Polynomial<NT>(num)-p).sign() == CGAL::NEGATIVE );}  template <class NT>    bool operator <=    (const int& num, const Polynomial<NT>& p)   { return ( (Polynomial<NT>(num)-p).sign() != CGAL::POSITIVE );}  template <class NT>    bool operator >    (const int& num, const Polynomial<NT>& p)   { return ( (Polynomial<NT>(num)-p).sign() == CGAL::POSITIVE );}  template <class NT>    bool operator >=    (const int& num, const Polynomial<NT>& p)   { return ( (Polynomial<NT>(num)-p).sign() != CGAL::NEGATIVE );}  // righthand side  template <class NT>    bool operator ==  (const Polynomial<NT>& p, const int& num)   { return ( (p-Polynomial<NT>(num)).sign() == CGAL::ZERO );}  template <class NT>    bool operator !=  (const Polynomial<NT>& p, const int& num)   { return ( (p-Polynomial<NT>(num)).sign() != CGAL::ZERO );}  template <class NT>    bool operator <   (const Polynomial<NT>& p, const int& num)   { return ( (p-Polynomial<NT>(num)).sign() == CGAL::NEGATIVE );}  template <class NT>    bool operator <=   (const Polynomial<NT>& p, const int& num)   { return ( (p-Polynomial<NT>(num)).sign() != CGAL::POSITIVE );}  template <class NT>    bool operator >   (const Polynomial<NT>& p, const int& num)   { return ( (p-Polynomial<NT>(num)).sign() == CGAL::POSITIVE );}  template <class NT>    bool operator >=  (const Polynomial<NT>& p, const int& num)   { return ( (p-Polynomial<NT>(num)).sign() != CGAL::NEGATIVE );}// SPECIALIZING inline to :  // lefthand side  inline    Polynomial<double> operator +   (const double& num, const Polynomial<double>& p2)  { return (Polynomial<double>(num) + p2); }  inline    Polynomial<double> operator -   (const double& num, const Polynomial<double>& p2)  { return (Polynomial<double>(num) - p2); }  inline    Polynomial<double> operator *   (const double& num, const Polynomial<double>& p2)  { return (Polynomial<double>(num) * p2); }  inline    Polynomial<double> operator /   (const double& num, const Polynomial<double>& p2)  { return (Polynomial<double>(num)/p2); }  inline    Polynomial<double> operator %  (const double& num, const Polynomial<double>& p2)  { return (Polynomial<double>(num)%p2); }  // righthand side  inline    Polynomial<double> operator +   (const Polynomial<double>& p1, const double& num)  { return (p1 + Polynomial<double>(num)); }  inline    Polynomial<double> operator -   (const Polynomial<double>& p1, const double& num)  { return (p1 - Polynomial<double>(num)); }  inline    Polynomial<double> operator *   (const Polynomial<double>& p1, const double& num)  { return (p1 * Polynomial<double>(num)); }  inline    Polynomial<double> operator /   (const Polynomial<double>& p1, const double& num)  { return (p1 / Polynomial<double>(num)); }  inline    Polynomial<double> operator %   (const Polynomial<double>& p1, const double& num)  { return (p1 % Polynomial<double>(num)); }  // lefthand side  inline    bool operator ==    (const double& num, const Polynomial<double>& p)   { return ( (Polynomial<double>(num)-p).sign() == CGAL::ZERO );}  inline    bool operator !=   (const double& num, const Polynomial<double>& p)   { return ( (Polynomial<double>(num)-p).sign() != CGAL::ZERO );}  inline    bool operator <    (const double& num, const Polynomial<double>& p)   { return ( (Polynomial<double>(num)-p).sign() == CGAL::NEGATIVE );}  inline    bool operator <=    (const double& num, const Polynomial<double>& p)   { return ( (Polynomial<double>(num)-p).sign() != CGAL::POSITIVE );}  inline    bool operator >    (const double& num, const Polynomial<double>& p)   { return ( (Polynomial<double>(num)-p).sign() == CGAL::POSITIVE );}  inline    bool operator >=    (const double& num, const Polynomial<double>& p)   { return ( (Polynomial<double>(num)-p).sign() != CGAL::NEGATIVE );}  // righthand side  inline    bool operator ==  (const Polynomial<double>& p, const double& num)   { return ( (p-Polynomial<double>(num)).sign() == CGAL::ZERO );}  inline    bool operator !=  (const Polynomial<double>& p, const double& num)   { return ( (p-Polynomial<double>(num)).sign() != CGAL::ZERO );}  inline    bool operator <   (const Polynomial<double>& p, const double& num)   { return ( (p-Polynomial<double>(num)).sign() == CGAL::NEGATIVE );}  inline    bool operator <=   (const Polynomial<double>& p, const double& num)   { return ( (p-Polynomial<double>(num)).sign() != CGAL::POSITIVE );}  inline    bool operator >   (const Polynomial<double>& p, const double& num)   { return ( (p-Polynomial<double>(num)).sign() == CGAL::POSITIVE );}  inline    bool operator >=  (const Polynomial<double>& p, const double& num)   { return ( (p-Polynomial<double>(num)).sign() != CGAL::NEGATIVE );}// SPECIALIZING pure double params:  // lefthand side  template <class NT>    Polynomial<NT> operator +   (const double& num, const Polynomial<NT>& p2)  { return (Polynomial<NT>(num) + p2); }  template <class NT>    Polynomial<NT> operator -   (const double& num, const Polynomial<NT>& p2)  { return (Polynomial<NT>(num) - p2); }  template <class NT>    Polynomial<NT> operator *   (const double& num, const Polynomial<NT>& p2)  { return (Polynomial<NT>(num) * p2); }  template <class NT>    Polynomial<NT> operator /   (const double& num, const Polynomial<NT>& p2)  { return (Polynomial<NT>(num)/p2); }  template <class NT>    Polynomial<NT> operator %   (const double& num, const Polynomial<NT>& p2)  { return (Polynomial<NT>(num)%p2); }  // righthand side  template <class NT>    Polynomial<NT> operator +   (const Polynomial<NT>& p1, const double& num)  { return (p1 + Polynomial<NT>(num)); }  template <class NT>    Polynomial<NT> operator -   (const Polynomial<NT>& p1, const double& num)  { return (p1 - Polynomial<NT>(num)); }  template <class NT>    Polynomial<NT> operator *   (const Polynomial<NT>& p1, const double& num)  { return (p1 * Polynomial<NT>(num)); }  template <class NT>    Polynomial<NT> operator /   (const Polynomial<NT>& p1, const double& num)  { return (p1 / Polynomial<NT>(num)); }  template <class NT>    Polynomial<NT> operator %   (const Polynomial<NT>& p1, const double& num)  { return (p1 % Polynomial<NT>(num)); }  // lefthand side  template <class NT>    bool operator ==    (const double& num, const Polynomial<NT>& p)   { return ( (Polynomial<NT>(num)-p).sign() == CGAL::ZERO );}  template <class NT>    bool operator !=   (const double& num, const Polynomial<NT>& p)   { return ( (Polynomial<NT>(num)-p).sign() != CGAL::ZERO );}  template <class NT>    bool operator <    (const double& num, const Polynomial<NT>& p)   { return ( (Polynomial<NT>(num)-p).sign() == CGAL::NEGATIVE );}  template <class NT>    bool operator <=    (const double& num, const Polynomial<NT>& p)   { return ( (Polynomial<NT>(num)-p).sign() != CGAL::POSITIVE );}  template <class NT>    bool operator >    (const double& num, const Polynomial<NT>& p)   { return ( (Polynomial<NT>(num)-p).sign() == CGAL::POSITIVE );}  template <class NT>    bool operator >=    (const double& num, const Polynomial<NT>& p)   { return ( (Polynomial<NT>(num)-p).sign() != CGAL::NEGATIVE );}  // righthand side  template <class NT>    bool operator ==  (const Polynomial<NT>& p, const double& num)   { return ( (p-Polynomial<NT>(num)).sign() == CGAL::ZERO );}  template <class NT>    bool operator !=  (const Polynomial<NT>& p, const double& num)   { return ( (p-Polynomial<NT>(num)).sign() != CGAL::ZERO );}  template <class NT>    bool operator <   (const Polynomial<NT>& p, const double& num)   { return ( (p-Polynomial<NT>(num)).sign() == CGAL::NEGATIVE );}  template <class NT>    bool operator <=   (const Polynomial<NT>& p, const double& num)   { return ( (p-Polynomial<NT>(num)).sign() != CGAL::POSITIVE );}  template <class NT>    bool operator >   (const Polynomial<NT>& p, const double& num)   { return ( (p-Polynomial<NT>(num)).sign() == CGAL::POSITIVE );}  template <class NT>    bool operator >=  (const Polynomial<NT>& p, const double& num)   { return ( (p-Polynomial<NT>(num)).sign() != CGAL::NEGATIVE );}// SPECIALIZE_FUNCTION ORIGINAL  // lefthand side  template <class NT>    Polynomial<NT> operator +   (const NT& num, const Polynomial<NT>& p2)  { return (Polynomial<NT>(num) + p2); }  template <class NT>    Polynomial<NT> operator -   (const NT& num, const Polynomial<NT>& p2)  { return (Polynomial<NT>(num) - p2); }  template <class NT>    Polynomial<NT> operator *   (const NT& num, const Polynomial<NT>& p2)  { return (Polynomial<NT>(num) * p2); }  template <class NT>    Polynomial<NT> operator /   (const NT& num, const Polynomial<NT>& p2)  { return (Polynomial<NT>(num)/p2); }  template <class NT>    Polynomial<NT> operator %   (const NT& num, const Polynomial<NT>& p2)  { return (Polynomial<NT>(num)%p2); }  // righthand side  template <class NT>    Polynomial<NT> operator +   (const Polynomial<NT>& p1, const NT& num)  { return (p1 + Polynomial<NT>(num)); }  template <class NT>    Polynomial<NT> operator -   (const Polynomial<NT>& p1, const NT& num)  { return (p1 - Polynomial<NT>(num)); }  template <class NT>    Polynomial<NT> operator *   (const Polynomial<NT>& p1, const NT& num)  { return (p1 * Polynomial<NT>(num)); }  template <class NT>    Polynomial<NT> operator /   (const Polynomial<NT>& p1, const NT& num)  { return (p1 / Polynomial<NT>(num)); }  template <class NT>    Polynomial<NT> operator %  (const Polynomial<NT>& p1, const NT& num)  { return (p1 % Polynomial<NT>(num)); }  // lefthand side  template <class NT>    bool operator ==    (const NT& num, const Polynomial<NT>& p)   { return ( (Polynomial<NT>(num)-p).sign() == CGAL::ZERO );}  template <class NT>    bool operator !=   (const NT& num, const Polynomial<NT>& p)   { return ( (Polynomial<NT>(num)-p).sign() != CGAL::ZERO );}  template <class NT>    bool operator <    (const NT& num, const Polynomial<NT>& p)   { return ( (Polynomial<NT>(num)-p).sign() == CGAL::NEGATIVE );}  template <class NT>    bool operator <=    (const NT& num, const Polynomial<NT>& p)   { return ( (Polynomial<NT>(num)-p).sign() != CGAL::POSITIVE );}  template <class NT>    bool operator >    (const NT& num, const Polynomial<NT>& p)   { return ( (Polynomial<NT>(num)-p).sign() == CGAL::POSITIVE );}  template <class NT>    bool operator >=    (const NT& num, const Polynomial<NT>& p)   { return ( (Polynomial<NT>(num)-p).sign() != CGAL::NEGATIVE );}  // righthand side  template <class NT>    bool operator ==  (const Polynomial<NT>& p, const NT& num)   { return ( (p-Polynomial<NT>(num)).sign() == CGAL::ZERO );}  template <class NT>    bool operator !=  (const Polynomial<NT>& p, const NT& num)   { return ( (p-Polynomial<NT>(num)).sign() != CGAL::ZERO );}  template <class NT>    bool operator <   (const Polynomial<NT>& p, const NT& num)   { return ( (p-Polynomial<NT>(num)).sign() == CGAL::NEGATIVE );}  template <class NT>    bool operator <=   (const Polynomial<NT>& p, const NT& num)   { return ( (p-Polynomial<NT>(num)).sign() != CGAL::POSITIVE );}  template <class NT>    bool operator >   (const Polynomial<NT>& p, const NT& num)   { return ( (p-Polynomial<NT>(num)).sign() == CGAL::POSITIVE );}  template <class NT>    bool operator >=  (const Polynomial<NT>& p, const NT& num)   { return ( (p-Polynomial<NT>(num)).sign() != CGAL::NEGATIVE );}// SPECIALIZE_FUNCTION(NT,int double) END//------------------------------------------------------------------template <class NT> void print_monomial(std::ostream& os, const NT& n, int i){  if (i==0) os << n;  if (i==1) os << n << "R";  if (i>1)  os << n << "R^" << i;}// I/O template <class NT>std::ostream& operator << (std::ostream& os, const Polynomial<NT>& p){  int i;  switch( os.iword(CGAL::IO::mode) )  {    case CGAL::IO::ASCII :      os << p.degree() << ' ';      for(i=0; i<=p.degree(); ++i)         os << p[i] << ' ';      break;    case CGAL::IO::BINARY :      CGAL::write(os, p.degree());      for( i=0; i <= p.degree(); ++i)         CGAL::write(os, p[i]);      break;  default: // i.e. PRETTY      os << "Polynomial(" << p.degree() << ", ";      for( i=0; i <= p.degree(); ++i) {          os << p[i];          if (i < p.degree())              os << ", ";      }      os << ")";      // Alternative pretty format      //print_monomial(os,p[p.degree()],p.degree());      //for(i=p.degree()-1; i>=0; --i) {      //  if (p[i]!=NT(0)) { os << " + "; print_monomial(os,p[i],i); }      //}      break;  }  return os;}template <class

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -