1 // Copyright (c) 2011 Tel-Aviv University (Israel), INRIA Sophia-Antipolis (France). 2 // All rights reserved. 3 // 4 // This file is part of CGAL (www.cgal.org). 5 // 6 // $URL: https://github.com/CGAL/cgal/blob/v5.3/Arrangement_on_surface_2/include/CGAL/Arr_rat_arc/Rational_function_pair.h $ 7 // $Id: Rational_function_pair.h 0779373 2020-03-26T13:31:46+01:00 Sébastien Loriot 8 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial 9 // 10 // Author(s) : Oren Salzman <orenzalz@post.tau.ac.il > 11 // Michael Hemmer <Michael.Hemmer@sophia.inria.fr> 12 13 #ifndef CGAL_RATIONAL_FUNCTION_ORDERED_PAIR_H 14 #define CGAL_RATIONAL_FUNCTION_ORDERED_PAIR_H 15 16 #include <CGAL/license/Arrangement_on_surface_2.h> 17 18 19 20 #include <CGAL/Arr_rat_arc/Base_rational_arc_ds_1.h> 21 #include <CGAL/Arr_rat_arc/Rational_function.h> 22 #include <CGAL/Arr_rat_arc/Rational_function_canonicalized_pair.h> 23 24 namespace CGAL { 25 namespace Arr_rational_arc { 26 27 template <typename AlgebraicKernel_d_1 > 28 class Rational_function_pair: 29 public Base_rational_arc_ds_1<AlgebraicKernel_d_1> 30 { 31 public: 32 typedef AlgebraicKernel_d_1 Algebraic_kernel_d_1; 33 typedef Base_rational_arc_ds_1<Algebraic_kernel_d_1> Base; 34 typedef CGAL::Arr_rational_arc::Rational_function_canonicalized_pair<Algebraic_kernel_d_1> 35 Rational_function_canonicalized_pair; 36 typedef CGAL::Arr_rational_arc::Rational_function<Algebraic_kernel_d_1> 37 Rational_function; 38 39 typedef typename Base::Polynomial_1 Polynomial_1; 40 typedef typename Base::Algebraic_real_1 Algebraic_real_1; 41 typedef typename Base::Algebraic_vector Algebraic_vector; 42 typedef typename Base::Multiplicity Multiplicity; 43 typedef typename Base::Multiplicity_vector Multiplicity_vector; 44 typedef typename Base::Root_multiplicity_vector Root_multiplicity_vector; 45 46 public: 47 Rational_function_pair(const Rational_function_canonicalized_pair& rat_pair, 48 bool is_opposite = false) : _rat_pair(rat_pair)49 _rat_pair(rat_pair), _is_opposite(is_opposite) 50 {} 51 52 Comparison_result compare_f_g_at(const Algebraic_real_1& x , 53 CGAL::Sign epsilon = CGAL::ZERO) 54 { 55 Comparison_result cr = _rat_pair.compare_f_g_at(x,epsilon); 56 return (_is_opposite) ? -cr : cr ; 57 } 58 compare_f_g_at(Arr_parameter_space boundary)59 Comparison_result compare_f_g_at(Arr_parameter_space boundary) 60 { 61 Comparison_result cr = _rat_pair.compare_f_g_at(boundary); 62 return (_is_opposite) ? -cr : cr ; 63 } 64 is_intersecting_in_range(const Arr_parameter_space left_parameter_space,const Algebraic_real_1 left,const Arr_parameter_space right_parameter_space,const Algebraic_real_1 right)65 bool is_intersecting_in_range(const Arr_parameter_space left_parameter_space, 66 const Algebraic_real_1 left, 67 const Arr_parameter_space right_parameter_space, 68 const Algebraic_real_1 right) 69 { 70 return _rat_pair.is_intersecting_in_range(left_parameter_space, left, 71 right_parameter_space, right); 72 } 73 roots()74 const Algebraic_vector & roots() const 75 { 76 return _rat_pair.roots(); 77 } 78 multiplicities()79 const Multiplicity_vector & multiplicities() const 80 { 81 return _rat_pair.multiplicities(); 82 } 83 84 private: 85 const Rational_function_canonicalized_pair& _rat_pair; 86 bool _is_opposite; 87 }; // Rational_function_pair 88 89 90 } //namespace Arr_rational_arc 91 } //namespace CGAL { 92 93 #endif //CGAL_RATIONAL_FUNCTION_ORDERED_PAIR_H 94