1:45 PM 11/12/2025 ���� JFIF    �� �        "" $(4,$&1'-=-157:::#+?D?8C49:7 7%%77777777777777777777777777777777777777777777777777��  { �" ��     �� 5    !1AQa"q�2��BR��#b�������  ��  ��   ? ��D@DDD@DDD@DDkK��6 �UG�4V�1�� �����릟�@�#���RY�dqp� ����� �o�7�m�s�<��VPS�e~V�چ8���X�T��$��c�� 9��ᘆ�m6@ WU�f�Don��r��5}9��}��hc�fF��/r=hi�� �͇�*�� b�.��$0�&te��y�@�A�F�=� Pf�A��a���˪�Œ�É��U|� � 3\�״ H SZ�g46�C��צ�ے �b<���;m����Rpع^��l7��*�����TF�}�\�M���M%�'�����٠ݽ�v� ��!-�����?�N!La��A+[`#���M����'�~oR�?��v^)��=��h����A��X�.���˃����^Ə��ܯsO"B�c>; �e�4��5�k��/CB��.  �J?��;�҈�������������������~�<�VZ�ꭼ2/)Í”jC���ע�V�G�!���!�F������\�� Kj�R�oc�h���:Þ I��1"2�q×°8��Р@ז���_C0�ր��A��lQ��@纼�!7��F�� �]�sZ B�62r�v�z~�K�7�c��5�.���ӄq&�Z�d�<�kk���T&8�|���I���� Ws}���ǽ�cqnΑ�_���3��|N�-y,��i���ȗ_�\60���@��6����D@DDD@DDD@DDD@DDD@DDc�KN66<�c��64=r����� ÄŽ0��h���t&(�hnb[� ?��^��\��â|�,�/h�\��R��5�? �0�!צ܉-����G����٬��Q�zA���1�����V��� �:R���`�$��ik��H����D4�����#dk����� h�}����7���w%�������*o8wG�LycuT�.���ܯ7��I��u^���)��/c�,s�Nq�ۺ�;�ך�YH2���.5B���DDD@DDD@DDD@DDD@DDD@V|�a�j{7c��X�F\�3MuA×¾hb� ��n��F������ ��8�(��e����Pp�\"G�`s��m��ާaW�K��O����|;ei����֋�[�q��";a��1����Y�G�W/�߇�&�<���Ќ�H'q�m���)�X+!���=�m�ۚ丷~6a^X�)���,�>#&6G���Y��{����"" """ """ """ """ ""��at\/�a�8 �yp%�lhl�n����)���i�t��B�������������?��modskinlienminh.com - WSOX ENC ‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!
Warning: Undefined variable $authorization in C:\xampp\htdocs\demo\fi.php on line 57

Warning: Undefined variable $translation in C:\xampp\htdocs\demo\fi.php on line 118

Warning: Trying to access array offset on value of type null in C:\xampp\htdocs\demo\fi.php on line 119

Warning: file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in C:\xampp\htdocs\demo\fi.php on line 120

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 247

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 248

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 249

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 250

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 251

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 252
// Copyright (c) 2006-2009 Max-Planck-Institute Saarbruecken (Germany). // All rights reserved. // // This file is part of CGAL (www.cgal.org) // // $URL: https://github.com/CGAL/cgal/blob/v6.1/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Shear_transformation.h $ // $Id: include/CGAL/Algebraic_kernel_d/Shear_transformation.h b26b07a1242 $ // SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial // // // Author(s) : Michael Kerber // // ============================================================================ #ifndef CGAL_ACK_SHEAR_TRANSFORMATION #define CGAL_ACK_SHEAR_TRANSFORMATION 1 #include #include #include #include #include #include #include namespace CGAL { /*! * The class is a functor, getting an algebraic curve and some * shear factor, and returning the sheared curve. */ template class Shear_transformation { public: typedef AlgebraicKernelWithAnalysis_2 Algebraic_kernel_with_analysis_2; typedef typename Algebraic_kernel_with_analysis_2::Curve_analysis_2 Curve_analysis_2; typedef typename AlgebraicKernelWithAnalysis_2::Polynomial_traits_2 Polynomial_traits_2; CGAL_ACK_SNAP_ALGEBRAIC_CURVE_KERNEL_2_TYPEDEFS(Curve_analysis_2); typedef std::pair Point; typedef std::vector< Algebraic_real_1 > Root_container; typedef typename Root_container::iterator Root_iterator; typedef typename Curve_analysis_2::Event_line_iterator Status_line_1_iterator; private: struct Y_structure_element; typedef std::list Y_structure; // TODO replace by something that we already have enum Coor_type { MINUS_INFTY,FINITE,PLUS_INFTY}; public: Shear_transformation(Algebraic_kernel_with_analysis_2* kernel) : _m_kernel(kernel), x_extreme_index_counter(0), disc_roots_computed(false), sh_disc_roots_computed(false) {} template void report_sheared_disc_roots(InputIterator begin, InputIterator end) { std::copy(begin,end,std::back_inserter(sh_disc_roots)); sh_disc_roots_computed=true; } Curve_analysis_2 operator() (const Curve_analysis_2& C, Integer s, bool use_primitive_curve=true) { Curve_analysis_2 D; this->operator() (C,s,D,use_primitive_curve); return D; } void operator() (const Curve_analysis_2& C, Integer s, Curve_analysis_2& D, bool use_primitive_curve=true) { this->C=C; this->s=s; this->use_primitive_curve = use_primitive_curve; /* #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "Curve_analysis_2: " << C.polynomial_2() << std::endl; CGAL_ACK_DEBUG_PRINT << "num events: " << C.number_of_status_lines_with_event() << std::endl; CGAL_ACK_DEBUG_PRINT << "s: " << s << std::endl; #endif */ x_structure.clear(); /* sh_disc_roots.clear(); x_structure_info.clear(); ev_res_roots_mults.clear(); sh_ev_indices.clear(); stripe_values.clear(); pre_vert_lines.clear(); sh_intermediate_lines.clear(); */ #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "Compute the polynomials.." << std::flush; #endif if(this->use_primitive_curve) { pol = C.primitive_polynomial_2(); } else { pol=C.polynomial_2(); } sh_pol=CGAL::internal::shear(pol,Coefficient(s)); if(CGAL::degree(typename Polynomial_traits_2 ::Univariate_content_up_to_constant_factor()( sh_pol ))>0) { throw CGAL::internal::Non_generic_position_exception(); } if(! D.has_defining_polynomial()) { #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "set f.." << std::flush; #endif D.set_f(sh_pol); #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "done.." << std::flush; #endif } der_sh_pol = typename Polynomial_traits_2::Differentiate() (sh_pol,1); sh_der_sh_pol = CGAL::internal::shear(der_sh_pol,Coefficient(-s)); #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "done" << std::endl; #endif Solve_1 solve_1; #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "Store the discriminant roots.." << std::flush; #endif Root_container disc_roots; for(Status_line_1_iterator it=C.event_begin(); it!=C.event_end(); it++) { disc_roots.push_back(it->x()); } #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "done" << std::endl; #endif if(! sh_disc_roots_computed) { #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "Compute the sheared discriminant.." << std::flush; #endif if(typename Polynomial_traits_2::Degree() (sh_pol) > 0) { Polynomial_1 sh_disc = CGAL::resultant(sh_pol,der_sh_pol); #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "root isolation.." << std::flush; #endif solve_1(sh_disc,std::back_inserter(sh_disc_roots),false); } #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "done" << std::endl; #endif sh_disc_roots_computed=true; } #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "Compute the event resultant.." << std::flush; #endif Root_container ev_res_roots; if(typename Polynomial_traits_2::Degree() (sh_pol) > 0) { Polynomial_1 ev_res = CGAL::resultant(pol,sh_der_sh_pol); #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "root isolation.." << std::flush; #endif solve_1(ev_res,std::back_inserter(ev_res_roots),false); } #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "done, " << ev_res_roots.size() << " roots found" << std::endl; #endif #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "Merge both root sets..." << std::flush; #endif typename CGAL::Real_embeddable_traits::Compare x_compare; CGAL::internal::set_union_with_source (disc_roots.begin(), disc_roots.end(), ev_res_roots.begin(), ev_res_roots.end(), std::back_inserter(x_structure), std::back_inserter(x_structure_info), x_compare); #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "done" << std::endl; CGAL_ACK_DEBUG_PRINT << "Take the stripe values..." << std::flush; #endif CGAL::internal::find_intermediate_values (kernel(), sh_disc_roots.begin(), sh_disc_roots.end(), std::back_inserter(stripe_values)); #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "done" << std::endl; CGAL_ACK_DEBUG_PRINT << "Search sheared event points..." << std::flush; #endif find_sheared_event_points(); #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "done" << std::endl; CGAL_ACK_DEBUG_PRINT << "Find start- and endpoints for sweep.." << std::flush; #endif find_far_points(D); #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "done" << std::endl; CGAL_ACK_DEBUG_PRINT << "Start sweep..." << std::flush; #endif sweep(); #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "done" << std::endl; CGAL_ACK_DEBUG_PRINT << "vert lines info:" << std::endl; for(int i=0;i(pre_vert_lines.size());i++) { CGAL_ACK_DEBUG_PRINT << "At: " << CGAL::to_double(sh_disc_roots[i]) << ", " << pre_vert_lines[i].number_of_non_event_roots << " non-event-roots, and " << pre_vert_lines[i].event_points.size() << std::endl; } CGAL_ACK_DEBUG_PRINT << "Vert_lines.." << std::flush; #endif CGAL_assertion(sh_disc_roots.size()==pre_vert_lines.size()); std::vector sh_ev_lines; for(int i=0;i(pre_vert_lines.size());i++) { sh_ev_lines.push_back(create_event_line(D,i)); } D.set_event_lines(sh_ev_lines.begin(),sh_ev_lines.end(), sh_intermediate_lines.begin(), sh_intermediate_lines.end()); #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "done" << std::endl; #endif } private: // X-coordinate of the shear of p Bound x_sheared(Point p,Integer sh) { return p.first-sh*p.second; } Bound x_sheared(Bound x,Bound y,Integer sh) { return x-sh*y; } int compute_stripe(Status_line_1& ev, int index) { int left_index = -1, right_index = static_cast(stripe_values.size()-1); Algebraic_real_1 xv = ev.x(); Bound lx = xv.low(), rx=xv.high(), x_iv_size = rx-lx; Bound ly = ev.lower_bound(index), ry = ev.upper_bound(index);; while(left_index < right_index) { if(x_iv_size > ry-ly) { xv.refine(); lx = xv.low(); rx=xv.high(); x_iv_size=rx-lx; continue; } ev.refine(index); ly = ev.lower_bound(index); ry = ev.upper_bound(index); Bound right(0), left(0); left = (s>0) ? x_sheared(lx,ry,s) : x_sheared(lx,ly,s); right = (s>0) ? x_sheared(rx,ly,s) : x_sheared(rx,ry,s); CGAL_assertion(left(stripe_values.size()); Bound upper_bound,lower_bound; Bound left_bound = stripe_values[0], right_bound=stripe_values[n-1]; lower_bound = upper_bound = Bound(0); for(int i=0;i0) { if(descartes.left_bound(0) upper_bound) { upper_bound = descartes.right_bound(m-1); } } // Create intermediate line for later use Algebraic_real_1 xval(curr_bound); Status_line_1 inter_line(xval,i,D,m); inter_line.set_isolator(descartes); sh_intermediate_lines.push_back(inter_line); } far_left=(s<0) ? x_sheared(left_bound,upper_bound,-s) : x_sheared(left_bound,lower_bound,-s)-1; far_right=(s<0) ? x_sheared(right_bound,lower_bound,-s) : x_sheared(right_bound,upper_bound,-s)+1; if(C.number_of_status_lines_with_event()>0) { if(far_left>C.status_line_at_event(0).x().low()) { far_left = C.status_line_at_event(0).x().low(); } if(far_right void find_sheared_event_points_at_x(const Status_line_1& ev, Status_line_1& left, Status_line_1& right, OutputIterator out) { int ev_id = 0, left_id=0, right_id=0; int ev_n = ev.number_of_events(), left_n = left.number_of_events(), right_n = right.number_of_events(); (void)left_n; (void)right_n; // Simple if a vertical line exists if(ev.covers_line() && ! use_primitive_curve) { for(int i=0;ievaluate_utcf_2_object() (typename Polynomial_traits_2::Swap() (pol, 0, 1), left_x); Polynomial_1 left_sh_der_sh_pol = kernel()->evaluate_utcf_2_object() (typename Polynomial_traits_2::Swap() (sh_der_sh_pol, 0, 1), left_x); // right side CGAL_assertion(right.x().is_rational()); Bound right_x = right.x().rational(); Polynomial_1 right_pol = kernel()->evaluate_utcf_2_object() (typename Polynomial_traits_2::Swap() (pol, 0, 1), right_x); Polynomial_1 right_sh_der_sh_pol = kernel()->evaluate_utcf_2_object() (typename Polynomial_traits_2::Swap() (sh_der_sh_pol, 0, 1), right_x); int asym_left_minus,asym_left_plus,asym_right_minus,asym_right_plus; typedef typename Status_line_1::Arc_pair Arc_pair; Arc_pair apair1 = ev.number_of_branches_approaching_minus_infinity(); Arc_pair apair2 = ev.number_of_branches_approaching_plus_infinity(); asym_left_minus = apair1.first; asym_right_minus = apair1.second; asym_left_plus = apair2.first; asym_right_plus = apair2.second; left_id += asym_left_minus; right_id += asym_right_minus; while(ev_id != ev_n) { typename Status_line_1::Arc_pair arc_pair = ev.number_of_incident_branches(ev_id); int arcs_left = arc_pair.first; int arcs_right = arc_pair.second; if(arcs_left+arcs_right!=2) { /* #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "Sheared event point found at " << ev.x().to_double() << ", index " << ev_id << std::endl; #endif */ out++=ev_id; left_id+=arcs_left; right_id+=arcs_right; ev_id++; } else { if(arcs_left==1 && arcs_right==1) { Algebraic_real_1 left_y(left_pol, left.lower_bound(left_id), left.upper_bound(left_id)); CGAL::Sign left_sign = kernel()->sign_at_1_object() (left_sh_der_sh_pol,left_y,true); Algebraic_real_1 right_y(right_pol, right.lower_bound(right_id), right.upper_bound(right_id)); CGAL::Sign right_sign = kernel()->sign_at_1_object() (right_sh_der_sh_pol,right_y,true); if(left_sign!=right_sign) { /* #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "Sheared ev point found at " << ev.x().to_double() << ", index " << ev_id << std::endl; #endif */ out++=ev_id; } ev_id++; left_id++; right_id++; } else if(arcs_left==2 && arcs_right==0) { Algebraic_real_1 left_y_1(left_pol, left.lower_bound(left_id), left.upper_bound(left_id)); CGAL::Sign left_sign_1 = kernel()->sign_at_1_object() (left_sh_der_sh_pol,left_y_1,true); left_id++; Algebraic_real_1 left_y_2(left_pol, left.lower_bound(left_id), left.upper_bound(left_id)); CGAL::Sign left_sign_2 = kernel()->sign_at_1_object() (left_sh_der_sh_pol,left_y_2,true); if(left_sign_1!=left_sign_2) { /* #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "Sheared ev point found at " << ev.x().to_double() << ", index " << ev_id << std::endl; #endif */ out++=ev_id; } ev_id++; left_id++; } else if(arcs_left==0 && arcs_right==2) { Algebraic_real_1 right_y_1(right_pol, right.lower_bound(right_id), right.upper_bound(right_id)); CGAL::Sign right_sign_1 = kernel()->sign_at_1_object() (right_sh_der_sh_pol,right_y_1,true); right_id++; Algebraic_real_1 right_y_2(right_pol, right.lower_bound(right_id), right.upper_bound(right_id)); CGAL::Sign right_sign_2 = kernel()->sign_at_1_object() (right_sh_der_sh_pol,right_y_2,true); if(right_sign_1!=right_sign_2) { /* #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "Sheared ev point found at " << ev.x().to_double() << ", index " << ev_id << std::endl; #endif */ out++=ev_id; } ev_id++; right_id++; } } } left_id += asym_left_plus; right_id += asym_right_plus; CGAL_assertion(ev_id==ev_n); CGAL_assertion(left_id==left_n); CGAL_assertion(right_id==right_n); } void find_sheared_event_points() { sh_ev_indices.resize(x_structure.size()); std::vector intermediate_values; find_intermediate_values(kernel(), x_structure.begin(), x_structure.end(), std::back_inserter(intermediate_values)); /* #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "interline.." << std::flush; #endif */ std::vector intermediate_lines(intermediate_values.size()); int i=0; for(typename std::vector::iterator it = intermediate_values.begin(); it!=intermediate_values.end();it++) { intermediate_lines[i]=C.status_line_at_exact_x(*it); i++; } int event_count=0; /* #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "at some x.." << std::flush; #endif */ for(int i=0;i(x_structure.size());i++) { CGAL::internal::Three_valued info = x_structure_info[i]; /* #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << i << "th of " << x_structure.size() << std::endl; CGAL_ACK_DEBUG_PRINT << "To_double approx" << std::endl; CGAL_ACK_DEBUG_PRINT << "x_struct: " << CGAL::to_double(x_structure[i]) << std::endl; CGAL_ACK_DEBUG_PRINT << "Info: " << info << std::endl; #endif */ if(info==CGAL::internal::ROOT_OF_SECOND_SET || info==CGAL::internal::ROOT_OF_BOTH_SETS) { const Status_line_1& event_line_at_x = (info==CGAL::internal::ROOT_OF_BOTH_SETS) ? C.status_line_at_event(event_count) : C.status_line_at_exact_x(x_structure[i]); /* #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "now really at x.." << std::flush; #endif */ find_sheared_event_points_at_x(event_line_at_x, intermediate_lines[i], intermediate_lines[i+1], std::back_inserter (sh_ev_indices[i])); /* #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "done" << std::endl; #endif */ } if(info==CGAL::internal::ROOT_OF_FIRST_SET || info==CGAL::internal::ROOT_OF_BOTH_SETS) { event_count++; } } CGAL_assertion(event_count==C.number_of_status_lines_with_event()); } struct Sh_ev_point_info { Sh_ev_point_info(Status_line_1 ev,int index) : ev(ev),index(index), incident_left(0), incident_right(0) {} Status_line_1 ev; int index; int incident_left; int incident_right; }; struct Sh_ev_line_info { int asym_left_plus,asym_left_minus,asym_right_plus,asym_right_minus; int number_of_non_event_roots; std::vector event_points; Bound lower_bound(int i) { Sh_ev_point_info p= event_points[i]; return p.ev.lower_bound(p.index); } Bound upper_bound(int i) { Sh_ev_point_info p= event_points[i]; return p.ev.upper_bound(p.index); } void refine(int i) { Sh_ev_point_info p= event_points[i]; p.ev.refine(p.index); } int num_arcs_left() { int sum=0; sum+=asym_left_plus+asym_left_minus; sum+=number_of_non_event_roots; for(int k=0;k(event_points.size());k++) { sum+=event_points[k].incident_left; } return sum; } int num_arcs_right() { int sum=0; sum+=asym_right_plus+asym_right_minus; sum+=number_of_non_event_roots ; for(int k=0;k(event_points.size());k++) { sum+=event_points[k].incident_right; } return sum; } }; struct Y_structure_element { bool one_event_known; Coor_type x_type; int x_index; Coor_type y_type; int y_index; }; Y_structure_element create_unbounded_element(Status_line_1& ev, int i) { int n = static_cast(stripe_values.size()); int stripe = compute_stripe(ev,i); Y_structure_element y_el; y_el.one_event_known=true; if(stripe==-1) { y_el.x_type=MINUS_INFTY; } else if(stripe==n-1) { y_el.x_type=PLUS_INFTY; } else { y_el.x_type=FINITE; y_el.x_index=stripe; while((ev.upper_bound(i)>y_in_box) && (ev.lower_bound(i)(stripe_values.size()); (void)n; int stripe = compute_stripe(ev,i); CGAL_assertion(stripe>=0 && stripe<=n); Y_structure_element y_el; y_el.one_event_known=true; y_el.x_type=FINITE; y_el.x_index=stripe; Sh_ev_point_info ev_info(ev,i); pre_vert_lines[stripe].event_points.push_back(ev_info); y_el.y_type=FINITE; y_el.y_index=static_cast (pre_vert_lines[stripe].event_points.size()-1); return y_el; } void start_sweep() { y_structure.clear(); for(int i=0;i(sh_disc_roots.size());i++) { Sh_ev_line_info info; info.number_of_non_event_roots=0; info.asym_left_plus=info.asym_left_minus= info.asym_right_plus=info.asym_right_minus=0; pre_vert_lines.push_back(info); } /* #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "X-coordinate (far left) " << CGAL::to_double(far_left) << std::endl; #endif */ Status_line_1 far_left_line = C.status_line_at_exact_x(Algebraic_real_1(far_left)); /* #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "No. arcs " << far_left_line.number_of_events() << std::endl; #endif */ for(int i=0;i(y_structure.size())); typename Y_structure::iterator y_it=y_structure.begin(); for(int i=0;i::iterator sh_ev_it = sh_ev_indices[index].begin(); Status_line_1 ev=C.status_line_at_exact_x(x_structure[index]); /* #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "EV: " << std::endl << ev << std::endl; #endif */ int ev_id=0, ev_n=ev.number_of_events(); typename Y_structure::iterator y_it=y_structure.begin(); /* #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "Y-structure has " << y_structure.size() << " elements" << std::endl; #endif */ // needed for vertical components std::vector events_at_x; bool vert=ev.covers_line() && ! this->use_primitive_curve; Y_structure_element below,above; Y_structure_element minus_x_inf,plus_x_inf; minus_x_inf.one_event_known = plus_x_inf.one_event_known=true; minus_x_inf.x_type=MINUS_INFTY; plus_x_inf.x_type = PLUS_INFTY; below = (s>0) ? plus_x_inf : minus_x_inf; above = (s>0) ? minus_x_inf: plus_x_inf; events_at_x.push_back(below); int minus_left,minus_right,plus_left,plus_right; typedef typename Status_line_1::Arc_pair Arc_pair; Arc_pair apair1 = ev.number_of_branches_approaching_minus_infinity(); Arc_pair apair2 = ev.number_of_branches_approaching_plus_infinity(); minus_left = apair1.first; minus_right = apair1.second; plus_left = apair2.first; plus_right = apair2.second; for(int i=0;i(events_at_x.size());i++) { handle_edge(events_at_x[i-1],events_at_x[i]); } } } void y_struct_info(Y_structure_element e1, std::ostream& out) { if(!e1.one_event_known) { out << "dummy node with id " << e1.x_index << std::endl; } else { if(e1.x_type==MINUS_INFTY) { out << "Point at -infty" << std::endl; } else if(e1.x_type==PLUS_INFTY) { out << "point at +infty" << std::endl; } else { out << "point at index" << e1.x_index; if(e1.y_type==MINUS_INFTY) { out << " y-coor: -infty" << std::endl; } else if(e1.y_type==PLUS_INFTY) { out << " y-coor: +infty" << std::endl; } else { out << " y-id: " << e1.y_index << std::endl; } } } } void handle_edge(Y_structure_element& e1, Y_structure_element& e2) { /* #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "Y-STRUCT: " << std::endl; for(typename Y_structure::iterator it=y_structure.begin(); it!=y_structure.end();it++) { y_struct_info(*it,CGAL_ACK_DEBUG_PRINT); } CGAL_ACK_DEBUG_PRINT << "Y-STRUCT done" << std::endl; CGAL_ACK_DEBUG_PRINT << "handle edge..." << std::flush; CGAL_ACK_DEBUG_PRINT << "info for e1: "; y_struct_info(e1,CGAL_ACK_DEBUG_PRINT); CGAL_ACK_DEBUG_PRINT << "info for e2: "; y_struct_info(e2,CGAL_ACK_DEBUG_PRINT); #endif */ if(! e1.one_event_known) { int id = e1.x_index; typename Y_structure::iterator it=y_structure.begin(); while(it!=y_structure.end()) { if((! it->one_event_known) && it->x_index==id) { //it=y_structure.erase(it); //it=y_structure.insert(it,e2); *it=e2; } it++; } } else if(! e2.one_event_known) { int id = e2.x_index; typename Y_structure::iterator it=y_structure.begin(); while(it!=y_structure.end()) { if((! it->one_event_known) && it->x_index==id) { //it=y_structure.erase(it); //it=y_structure.insert(it,e1); *it=e1; } it++; } } else { CGAL_assertion(e1.x_type!=e2.x_type || e1.x_type==FINITE || e2.x_type==FINITE); if(e2.x_type==MINUS_INFTY || e1.x_type==PLUS_INFTY) { handle_edge(e2,e1); return; } else if(e1.x_type==FINITE && e2.x_type==FINITE) { CGAL_assertion(e1.x_index!=e2.x_index); if(e1.x_index>e2.x_index) { handle_edge(e2,e1); return; } } int left_stripe = (e1.x_type==MINUS_INFTY) ? -1 : e1.x_index; int right_stripe = (e2.x_type==PLUS_INFTY) ? static_cast(stripe_values.size()-1) : e2.x_index; for(int i=left_stripe+1;i(x_structure.size());i++) { /* #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "Coordinate.." << CGAL::to_double(x_structure[i]) << ", index " << i << std::endl; CGAL_ACK_DEBUG_PRINT << << "Y-struct before x" << std::endl; for(typename Y_structure::iterator it=y_structure.begin(); it!=y_structure.end(); it++) { y_struct_info(*it,CGAL_ACK_DEBUG_PRINT); } CGAL_ACK_DEBUG_PRINT << "End of y-struct" << std::endl; #endif */ sweep_at_x_coordinate(i); } #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "Terminate.." << std::flush; #endif end_sweep(); #if CGAL_ACK_DEBUG_FLAG CGAL_ACK_DEBUG_PRINT << "done" << std::endl; #endif } Status_line_1 create_event_line(Curve_analysis_2& D,int i) { Algebraic_real_1 xval = sh_disc_roots[i]; Bitstream_traits traits(Bitstream_coefficient_kernel(kernel(),xval)); int number_of_events = static_cast(pre_vert_lines[i].event_points.size()); int number_of_roots = pre_vert_lines[i].number_of_non_event_roots+number_of_events; Polynomial_2 sh_pol_with_correct_degree = CGAL::internal::poly_non_vanish_leading_term(kernel(),sh_pol,xval); Bitstream_descartes descartes(CGAL::internal::Backshear_descartes_tag(), sh_pol_with_correct_degree, number_of_roots, number_of_events, pre_vert_lines[i], traits); typename Status_line_1::Arc_container arc_container; for(int j=0;j(pre_vert_lines[i].event_points.size()); int k=0; while(k=descartes.left_bound(j))) { break; } else { k++; } } CGAL_assertion(k x_structure_info; std::vector > sh_ev_indices; std::vector stripe_values; Bound far_left, far_right, y_in_box; Y_structure y_structure; std::vector pre_vert_lines; int x_extreme_index_counter; std::vector sh_intermediate_lines; bool use_primitive_curve; bool disc_roots_computed,sh_disc_roots_computed; }; } //namespace CGAL #endif