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

📄 filtered_function_leaf_nodes.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/filtered_function_leaf_nodes.h $// $Id: filtered_function_leaf_nodes.h 28655 2006-02-21 05:49:40Z drussel $// //// Author(s)     : Daniel Russel <drussel@alumni.princeton.edu>#ifndef CGAL_POLYNOMIAL_INTERNAL_VIRTUAL_FUNCTION_REPS_H#define CGAL_POLYNOMIAL_INTERNAL_VIRTUAL_FUNCTION_REPS_H#include <CGAL/Polynomial/basic.h>#include <CGAL/Polynomial/internal/filtered_function_node_bases.h>#include <CGAL/Polynomial/internal/interval_arithmetic.h>CGAL_POLYNOMIAL_BEGIN_INTERNAL_NAMESPACEtemplate <class Traits>class Filtered_function_node_constant: public Filtered_function_node<Traits>{    typedef Filtered_function_node_constant<Traits> This;    typedef Filtered_function_node<Traits> P;    public:        Filtered_function_node_constant(const typename P::Exact_function::NT& val,        const typename P::Interval_function_converter &ifc): P(ifc) {            P::set_interval_function(typename P::Interval_function(ifc.nt_converter()(val)));            P::set_exact_function(typename P::Exact_function(val/*this->num_*/));        }        virtual ~Filtered_function_node_constant(){}        virtual void write(std::ostream &out) const        {            out << P::exact_function();        }    protected:        virtual  void generate_exact_function() const        {            CGAL_Polynomial_assertion(0);        }};template <class Traits>class Filtered_function_node_double_constant: public Filtered_function_node<Traits>{    typedef Filtered_function_node_double_constant<Traits> This;    typedef Filtered_function_node<Traits> P;    public:        Filtered_function_node_double_constant(double d, const typename P::Interval_function_converter &ifc): P(ifc) {            P::set_interval_function(typename P::Interval_function(std::pair<double,double>(d,d)));        }        virtual ~Filtered_function_node_double_constant(){}        virtual void write(std::ostream &out) const        {            out << P::interval_function()[0].sup();        }    protected:        virtual  void generate_exact_function() const        {            P::set_exact_function(typename P::Exact_function(typename P::Exact_function::NT(P::interval_function()[0].sup())));        }};template <class Traits>class Filtered_function_node_explicit: public Filtered_function_node<Traits>{    typedef Filtered_function_node_explicit<Traits> This;    typedef Filtered_function_node<Traits> P;    public:        Filtered_function_node_explicit(const typename P::Exact_function f, const typename P::Interval_function_converter &ifc): P(ifc) {            P::set_interval_function(ifc(f));            P::set_exact_function(f);        }        virtual ~Filtered_function_node_explicit(){}        virtual void write(std::ostream &out) const        {            if (P::exact_function().degree() >0) {                out << "("<< P::exact_function() << ")";            }            else {                out << P::exact_function();            }        }    protected:        virtual  void generate_exact_function() const        {            CGAL_Polynomial_assertion(0);        }};template <class Traits>class Filtered_function_node_double_explicit: public Filtered_function_node<Traits>{    typedef Filtered_function_node_double_explicit<Traits> This;    typedef Filtered_function_node<Traits> P;    public:        template <class DF>        Filtered_function_node_double_explicit(const DF& f, const typename P::Interval_function_converter &ifc): P(ifc) {            typename P::Interval_function fi;            fi.set_nominal_degree(f.degree());            for (int i=0; i<= f.degree(); ++i) {                fi.set_coef(i, std::pair<double,double>(f[i], f[i]));            }            P::set_interval_function(fi);        }        virtual ~Filtered_function_node_double_explicit(){}        virtual void write(std::ostream &out) const        {            if (P::interval_function().nominal_degree() >0) {                out << "("<< P::exact_function() << ")";            }            else {                out << P::exact_function();            }        }    protected:        virtual  void generate_exact_function() const        {            typename P::Exact_function fe;            int deg= P::interval_function().nominal_degree();            fe.set_nominal_degree(deg);            for (int i=0; i<= this->f.degree(); ++i) {                fe.set_coef(i, typename P::Exact_function::NT(this->f[i].sup()));            }            P::set_exact_function(fe);        }};CGAL_POLYNOMIAL_END_INTERNAL_NAMESPACE#endif

⌨️ 快捷键说明

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