mirror of https://github.com/CGAL/cgal
Construction method for segments added
This commit is contained in:
parent
4030bc9fa9
commit
87aa6f8a01
|
|
@ -99,10 +99,9 @@ int main() {
|
|||
std::back_inserter(segs));
|
||||
|
||||
// Construct a vertical segment
|
||||
Curve_2 cv4 = construct_curve(x);
|
||||
Point_2 v1 = construct_point(Algebraic_real_1(0),cv2,0);
|
||||
Point_2 v1 = construct_point(0,0);
|
||||
Point_2 v2 = construct_point(Algebraic_real_1(0),cv1,1);
|
||||
construct_x_monotone_segment(cv4,v1,v2,std::back_inserter(segs));
|
||||
construct_x_monotone_segment(v1,v2,std::back_inserter(segs));
|
||||
|
||||
CGAL::insert(arr,segs.begin(),segs.end());
|
||||
|
||||
|
|
|
|||
|
|
@ -478,6 +478,60 @@ public:
|
|||
out);
|
||||
}
|
||||
}
|
||||
|
||||
template<typename OutputIterator> OutputIterator
|
||||
operator() (Point_2 p, Point_2 q, OutputIterator out) {
|
||||
bool same_x=(this->_ckva()->compare_x_2_object()(p,q)==CGAL::EQUAL);
|
||||
if(same_x) {
|
||||
Algebraic_real_1 x = p.x();
|
||||
Polynomial_2 f = Polynomial_2(x.polynomial());
|
||||
Curve_2 cv
|
||||
= this->_ckva()->kernel().construct_curve_2_object() (f);
|
||||
*out++=typename CKvA_2::Arc_2(p,q,cv);
|
||||
return out;
|
||||
}
|
||||
Algebraic_real_1 px
|
||||
=this->_ckva()->kernel().compute_x_2_object()(p.xy()),
|
||||
py=this->_ckva()->kernel().compute_y_2_object()(p.xy()),
|
||||
qx=this->_ckva()->kernel().compute_x_2_object()(q.xy()),
|
||||
qy=this->_ckva()->kernel().compute_y_2_object()(q.xy());
|
||||
bool p_rat=px.is_rational() && py.is_rational();
|
||||
bool q_rat=qx.is_rational() && qy.is_rational();
|
||||
if(p_rat && q_rat) {
|
||||
typedef typename Algebraic_real_1::Rational Rational;
|
||||
Rational pxr=px.rational(), pyr=py.rational(),
|
||||
qxr=qx.rational(), qyr=qy.rational();
|
||||
typedef CGAL::Fraction_traits<Rational> FT;
|
||||
typename FT::Decompose decompose;
|
||||
typedef typename FT::Numerator_type Numerator;
|
||||
typedef typename FT::Denominator_type Denominator;
|
||||
Rational term_at_y=qxr-pxr, term_at_x=-qyr+pyr,
|
||||
term_at_1=pxr*qyr-pyr*qxr;
|
||||
Denominator denom_curr;
|
||||
Numerator term_at_y_int, term_at_x_int, term_at_1_int;
|
||||
decompose(term_at_y, term_at_y_int, denom_curr);
|
||||
term_at_x=term_at_x*denom_curr;
|
||||
term_at_1=term_at_1*denom_curr;
|
||||
decompose(term_at_x,term_at_x_int,denom_curr);
|
||||
term_at_y_int=term_at_y_int*denom_curr;
|
||||
term_at_1=term_at_1*denom_curr;
|
||||
decompose(term_at_1,term_at_1_int,denom_curr);
|
||||
term_at_y_int=term_at_y_int*denom_curr;
|
||||
term_at_x_int=term_at_x_int*denom_curr;
|
||||
typedef typename CGAL::Polynomial_traits_d<Polynomial_2>
|
||||
::Coefficient_type Polynomial_1;
|
||||
Polynomial_2 pol(Polynomial_1(term_at_1_int,term_at_x_int),
|
||||
Polynomial_1(term_at_y_int));
|
||||
Curve_2 curve=this->_ckva()->kernel().construct_curve_2_object()
|
||||
(pol);
|
||||
std::cout << curve << std::endl;
|
||||
CGAL_assertion(this->_ckva()->is_on_2_object()(p,curve));
|
||||
CGAL_assertion(this->_ckva()->is_on_2_object()(q,curve));
|
||||
return this->operator()(curve,p,q,out);
|
||||
}
|
||||
CGAL_precondition(same_x || (p_rat && q_rat));
|
||||
return out;
|
||||
}
|
||||
};
|
||||
|
||||
Construct_x_monotone_segment_2 construct_x_monotone_segment_2_object()
|
||||
|
|
|
|||
Loading…
Reference in New Issue