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) 2007-09 INRIA Sophia-Antipolis (France). // All rights reserved. // // This file is part of CGAL (www.cgal.org). // // $URL: https://github.com/CGAL/cgal/blob/v6.1/Point_set_processing_3/include/CGAL/grid_simplify_point_set.h $ // $Id: include/CGAL/grid_simplify_point_set.h b26b07a1242 $ // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial // // Author(s) : Nader Salman and Laurent Saboret #ifndef CGAL_GRID_SIMPLIFY_POINT_SET_H #define CGAL_GRID_SIMPLIFY_POINT_SET_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace CGAL { // ---------------------------------------------------------------------------- // Private section // ---------------------------------------------------------------------------- /// \cond SKIP_IN_MANUAL namespace internal { // Round number to multiples of epsilon inline double round_epsilon(double value, double epsilon) { return std::floor(value / epsilon); } /// Utility class for grid_simplify_point_set(): Hash_epsilon_points_3 /// defines a 3D point hash / 2 points are equal iff they belong to /// the same cell of a grid of cell size = epsilon. template struct Hash_epsilon_points_3 { private: double m_epsilon; PointMap point_map; typedef typename boost::property_traits::value_type Point; public: Hash_epsilon_points_3 (double epsilon, PointMap p_map) : m_epsilon (epsilon), point_map(p_map) { CGAL_precondition(epsilon > 0); } std::size_t operator() (const Point_3& a) const { const Point& pa = get(point_map,a); std::size_t result = boost::hash_value(round_epsilon(pa.x(), m_epsilon)); boost::hash_combine(result, boost::hash_value(round_epsilon(pa.y(), m_epsilon))); boost::hash_combine(result, boost::hash_value(round_epsilon(pa.z(), m_epsilon))); return result; } }; /// Utility class for grid_simplify_point_set(): Hash_epsilon_points_3 /// defines a 3D point equality / 2 points are equal iff they belong /// to the same cell of a grid of cell size = epsilon. template struct Equal_epsilon_points_3 { private: const double m_epsilon; PointMap point_map; typedef typename boost::property_traits::value_type Point; public: Equal_epsilon_points_3 (const double& epsilon, PointMap p_map) : m_epsilon (epsilon), point_map(p_map) { CGAL_precondition(epsilon > 0); } bool operator() (const Point_3& a, const Point_3& b) const { const Point& pa = get(point_map,a); const Point& pb = get(point_map,b); double ra = round_epsilon(pa.x(), m_epsilon); double rb = round_epsilon(pb.x(), m_epsilon); if (ra != rb) return false; ra = round_epsilon(pa.y(), m_epsilon); rb = round_epsilon(pb.y(), m_epsilon); if (ra != rb) return false; ra = round_epsilon(pa.z(), m_epsilon); rb = round_epsilon(pb.z(), m_epsilon); return ra == rb; } }; template using Epsilon_point_set_3_base = typename std::conditional , internal::Equal_epsilon_points_3 >, std::unordered_set, internal::Equal_epsilon_points_3 > >::type; /// Utility class for grid_simplify_point_set(): /// 3D points set which allows at most 1 (or N) point per cell /// of a grid of cell size = epsilon. /// /// Warning: /// This class is a container sorted wrt points position /// => you should not modify directly the order or the position of points. template class Epsilon_point_set_3 : public internal::Epsilon_point_set_3_base { private: // superclass using Base = internal::Epsilon_point_set_3_base; unsigned int min_points_per_cell; public: Epsilon_point_set_3 (double epsilon, PointMap point_map, unsigned int min_points_per_cell = 1) : Base(10, internal::Hash_epsilon_points_3(epsilon, point_map), internal::Equal_epsilon_points_3(epsilon, point_map)) , min_points_per_cell (min_points_per_cell) { CGAL_precondition(epsilon > 0); } bool insert (const Point_3& p) { return insert (p, UseMap()); } private: bool insert (const Point_3& p, const Tag_true&) { auto iter = Base::insert(std::make_pair (p, 0)); iter.first->second ++; return iter.first->second == min_points_per_cell; } bool insert (const Point_3& p, const Tag_false&) { return Base::insert (p).second; } }; } /* namespace internal */ /// \endcond // ---------------------------------------------------------------------------- // Public section // ---------------------------------------------------------------------------- /** \ingroup PkgPointSetProcessing3Algorithms Merges points which belong to the same cell of a grid of cell size = `epsilon`. This method modifies the order of input points so as to pack all remaining points first, and returns an iterator over the first point to remove (see erase-remove idiom). For this reason it should not be called on sorted containers. \pre `epsilon > 0` \tparam PointRange is a model of `Range`. The value type of its iterator is the key type of the named parameter `point_map`. \param points input point range \param epsilon tolerance value when merging 3D points. \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below \cgalNamedParamsBegin \cgalParamNBegin{point_map} \cgalParamDescription{a property map associating points to the elements of the point set `points`} \cgalParamType{a model of `ReadWritePropertyMap` whose key type is the value type of the iterator of `PointRange` and whose value type is `geom_traits::Point_3`} \cgalParamDefault{`CGAL::Identity_property_map`} \cgalParamNEnd \cgalParamNBegin{min_points_per_cell} \cgalParamDescription{minimum number of points in a cell such that a point in this cell is kept after simplification} \cgalParamType{unsigned int} \cgalParamDefault{1} \cgalParamExtra{If a value greater than 1 is used, the algorithm also acts as an outlier filtering algorithm, by removing low-density areas.} \cgalParamNEnd \cgalParamNBegin{geom_traits} \cgalParamDescription{an instance of a geometric traits class} \cgalParamType{a model of `Kernel`} \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} \cgalParamNEnd \cgalNamedParamsEnd \return iterator over the first point to remove. */ template typename PointRange::iterator grid_simplify_point_set( PointRange& points, double epsilon, const NamedParameters& np = parameters::default_values()) { using parameters::choose_parameter; using parameters::get_parameter; typedef Point_set_processing_3_np_helper NP_helper; typedef typename NP_helper::Point_map PointMap; PointMap point_map = NP_helper::get_point_map(points, np); unsigned int min_points_per_cell = choose_parameter(get_parameter(np, internal_np::min_points_per_cell), 1); // actual type of input points typedef typename std::iterator_traits::value_type Enriched_point; CGAL_precondition(epsilon > 0); if (min_points_per_cell == 1) { // Merges points which belong to the same cell of a grid of cell size = epsilon. // Keep 1 point per occupied cell internal::Epsilon_point_set_3 point_set(epsilon, point_map); return std::partition (points.begin(), points.end(), [&](const auto& p) -> bool { return point_set.insert(p); }); } // else // Merges points which belong to the same cell of a grid of cell size = epsilon. // Keep 1 point per cell occupied by at least `min_points_per_cell` points internal::Epsilon_point_set_3 point_set(epsilon, point_map, min_points_per_cell); return std::partition (points.begin(), points.end(), [&](const auto& p) -> bool { return point_set.insert(p); }); } } //namespace CGAL #include #endif // CGAL_GRID_SIMPLIFY_POINT_SET_H