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

📄 sign_above.h

📁 很多二维 三维几何计算算法 C++ 类库
💻 H
字号:
// Copyright (c) 2005  Stanford University (USA).// All rights reserved.//// This file is part of CGAL (www.cgal.org); you can redistribute it and/or// modify it under the terms of the GNU Lesser General Public License as// published by the Free Software Foundation; version 2.1 of the License.// See the file LICENSE.LGPL distributed with CGAL.//// Licensees holding a valid commercial license may use this file in// accordance with the commercial license agreement provided with the software.//// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.//// $URL: svn+ssh://scm.gforge.inria.fr/svn/cgal/branches/CGAL-3.3-branch/Kinetic_data_structures/include/CGAL/Polynomial/internal/Kernel/Sign_above.h $// $Id: Sign_above.h 35780 2007-01-24 04:44:16Z drussel $// //// Author(s)     : Daniel Russel <drussel@alumni.princeton.edu>#ifndef CGAL_POLYNOMIAL_INTERNAL_AFTER_AT_ROOT_H#define CGAL_POLYNOMIAL_INTERNAL_AFTER_AT_ROOT_H#include <CGAL/Polynomial/basic.h>//#include <CGAL/Polynomial/internal/Explicit_root.h>#include <CGAL/Polynomial/internal/Rational/Evaluate_polynomial.h>#include <CGAL/Polynomial/internal/Rational/Sign_above_rational.h>CGAL_POLYNOMIAL_BEGIN_INTERNAL_NAMESPACE//! Compute the sign after a root./*!  This has specializations for Explicit_roots.*/template <class RNT, class K>class Sign_above: Sign_above_rational<K>{  typedef typename K::Function Poly;  typedef Sign_above_rational<K> P;public:  Sign_above( K k):P(k) {  }  Sign_above(){}  using P::operator();  typedef CGAL::Sign result_type;  typedef Poly first_argument_type;  typedef typename K::Root second_argument_type;  typename P::result_type operator()(const first_argument_type &f,				     const second_argument_type &v) const  {    CGAL_Polynomial_expensive_precondition(k_.sign_at_root_object(p_)(v)==CGAL::ZERO);    return eval(f, v);  }protected:  template <class R>  CGAL::Sign eval(const Poly &p, const R &r) const  {    double ub= CGAL::to_interval(r).second+.00001;    if (ub== CGAL::to_interval(r).second) ub= ub*2;    typename K::Root_stack rc=  k_.root_stack_object(p, r, ub);    while (true) {      if (rc.empty()) {	return k_.sign_at_object()(p,typename Poly::NT(ub));      } else if (rc.top() != r) {	typename K::Root rr=rc.top();	typename K::Sign_between_roots sb= k_.sign_between_roots_object();	return sb(p, r, rr);      } else {	rc.pop();      }    }  }  K k_;};CGAL_POLYNOMIAL_END_INTERNAL_NAMESPACE#endif

⌨️ 快捷键说明

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