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) 2022-2024 INRIA Sophia-Antipolis (France), GeometryFactory (France). // All rights reserved. // // This file is part of CGAL (www.cgal.org). // // $URL: https://github.com/CGAL/cgal/blob/v6.1/Isosurfacing_3/include/CGAL/Isosurfacing_3/interpolation_schemes_3.h $ // $Id: include/CGAL/Isosurfacing_3/interpolation_schemes_3.h b26b07a1242 $ // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial // // Author(s) : Mael Rouxel-Labbé #ifndef CGAL_ISOSURFACING_3_INTERNAL_INTERPOLATION_SCHEMES_3_H #define CGAL_ISOSURFACING_3_INTERNAL_INTERPOLATION_SCHEMES_3_H #include #include #include #include #include namespace CGAL { namespace Isosurfacing { /*! * \ingroup IS_Fields_helpers_grp * * \cgalModels{IsosurfacingInterpolationScheme_3} * * The class `Trilinear_interpolation` is the standard interpolation scheme * to define continuous fields of scalar values and gradients from data defined * only at the vertices of a %Cartesian grid. * * \tparam Grid must be `CGAL::Isosurfacing::Cartesian_grid_3`, with `GeomTraits` * a model of `IsosurfacingTraits_3` */ template class Trilinear_interpolation { public: using Geom_traits = typename Grid::Geom_traits; using FT = typename Geom_traits::FT; using Point_3 = typename Geom_traits::Point_3; using Vector_3 = typename Geom_traits::Vector_3; using Iso_cuboid_3 = typename Geom_traits::Iso_cuboid_3; public: /*! * \brief interpolates the values at a given point using trilinear interpolation. * * \param p the point at which values are interpolated * \param g the grid * \param values the continuous field of scalar values, defined over the geometric span of `g` */ FT interpolated_value(const Point_3& p, const Grid& g, const std::vector& values) const { typename Geom_traits::Compute_x_3 x_coord = g.geom_traits().compute_x_3_object(); typename Geom_traits::Compute_y_3 y_coord = g.geom_traits().compute_y_3_object(); typename Geom_traits::Compute_z_3 z_coord = g.geom_traits().compute_z_3_object(); typename Geom_traits::Construct_vertex_3 vertex = g.geom_traits().construct_vertex_3_object(); // trilinear interpolation of stored values const Iso_cuboid_3& span = g.span(); const Vector_3& spacing = g.spacing(); // calculate min index including border case const Point_3& min_p = vertex(span, 0); std::size_t i = std::size_t(CGAL::to_double((x_coord(p) - x_coord(min_p)) / x_coord(spacing))); std::size_t j = std::size_t(CGAL::to_double((y_coord(p) - y_coord(min_p)) / y_coord(spacing))); std::size_t k = std::size_t(CGAL::to_double((z_coord(p) - z_coord(min_p)) / z_coord(spacing))); if(i == g.xdim() - 1) --i; if(j == g.ydim() - 1) --j; if(k == g.zdim() - 1) --k; // calculate coordinates of min index const FT min_x = x_coord(min_p) + FT(i) * spacing[0]; const FT min_y = y_coord(min_p) + FT(j) * spacing[1]; const FT min_z = z_coord(min_p) + FT(k) * spacing[2]; // interpolation factors between 0 and 1 const FT f_i = std::clamp((x_coord(p) - min_x) / spacing[0], 0, 1); const FT f_j = std::clamp((y_coord(p) - min_y) / spacing[1], 0, 1); const FT f_k = std::clamp((z_coord(p) - min_z) / spacing[2], 0, 1); // read the value at all 8 corner points const FT g000 = values[g.linear_index(i + 0, j + 0, k + 0)]; const FT g001 = values[g.linear_index(i + 0, j + 0, k + 1)]; const FT g010 = values[g.linear_index(i + 0, j + 1, k + 0)]; const FT g011 = values[g.linear_index(i + 0, j + 1, k + 1)]; const FT g100 = values[g.linear_index(i + 1, j + 0, k + 0)]; const FT g101 = values[g.linear_index(i + 1, j + 0, k + 1)]; const FT g110 = values[g.linear_index(i + 1, j + 1, k + 0)]; const FT g111 = values[g.linear_index(i + 1, j + 1, k + 1)]; // interpolate along all axes by weighting the corner points const FT lambda000 = (FT(1) - f_i) * (FT(1) - f_j) * (FT(1) - f_k); const FT lambda001 = (FT(1) - f_i) * (FT(1) - f_j) * f_k; const FT lambda010 = (FT(1) - f_i) * f_j * (FT(1) - f_k); const FT lambda011 = (FT(1) - f_i) * f_j * f_k; const FT lambda100 = f_i * (FT(1) - f_j) * (FT(1) - f_k); const FT lambda101 = f_i * (FT(1) - f_j) * f_k; const FT lambda110 = f_i * f_j * (FT(1) - f_k); const FT lambda111 = f_i * f_j * f_k; // add weighted corners return g000 * lambda000 + g001 * lambda001 + g010 * lambda010 + g011 * lambda011 + g100 * lambda100 + g101 * lambda101 + g110 * lambda110 + g111 * lambda111; } /*! * \brief interpolates the gradients at a given point using trilinear interpolation. * * \param p the point at which to interpolate the gradients * \param g the grid * \param gradients the continuous field of vector values, defined over the geometric span of `g` */ Vector_3 interpolated_gradient(const Point_3& p, const Grid& g, const std::vector& gradients) const { typename Geom_traits::Compute_x_3 x_coord = g.geom_traits().compute_x_3_object(); typename Geom_traits::Compute_y_3 y_coord = g.geom_traits().compute_y_3_object(); typename Geom_traits::Compute_z_3 z_coord = g.geom_traits().compute_z_3_object(); typename Geom_traits::Construct_vector_3 vector = g.geom_traits().construct_vector_3_object(); typename Geom_traits::Construct_vertex_3 vertex = g.geom_traits().construct_vertex_3_object(); // trilinear interpolation of stored gradients const Iso_cuboid_3& span = g.span(); const Vector_3& spacing = g.spacing(); // calculate min index including border case const Point_3& min_p = vertex(span, 0); std::size_t i = static_cast((x_coord(p) - x_coord(min_p)) / x_coord(spacing)); std::size_t j = static_cast((y_coord(p) - y_coord(min_p)) / y_coord(spacing)); std::size_t k = static_cast((z_coord(p) - z_coord(min_p)) / z_coord(spacing)); if(i == g.xdim() - 1) // dim is the point number --i; if(j == g.ydim() - 1) --j; if(k == g.zdim() - 1) --k; // calculate coordinates of min index const FT min_x = i * spacing[0] + x_coord(min_p); const FT min_y = j * spacing[1] + y_coord(min_p); const FT min_z = k * spacing[2] + z_coord(min_p); // interpolation factors between 0 and 1 const FT f_i = std::clamp((x_coord(p) - min_x) / spacing[0], 0, 1); const FT f_j = std::clamp((y_coord(p) - min_y) / spacing[1], 0, 1); const FT f_k = std::clamp((z_coord(p) - min_z) / spacing[2], 0, 1); // read the value at all 8 corner points const Vector_3& g000 = gradients[g.linear_index(i + 0, j + 0, k + 0)]; const Vector_3& g001 = gradients[g.linear_index(i + 0, j + 0, k + 1)]; const Vector_3& g010 = gradients[g.linear_index(i + 0, j + 1, k + 0)]; const Vector_3& g011 = gradients[g.linear_index(i + 0, j + 1, k + 1)]; const Vector_3& g100 = gradients[g.linear_index(i + 1, j + 0, k + 0)]; const Vector_3& g101 = gradients[g.linear_index(i + 1, j + 0, k + 1)]; const Vector_3& g110 = gradients[g.linear_index(i + 1, j + 1, k + 0)]; const Vector_3& g111 = gradients[g.linear_index(i + 1, j + 1, k + 1)]; // interpolate along all axes by weighting the corner points const FT lambda000 = (FT(1) - f_i) * (FT(1) - f_j) * (FT(1) - f_k); const FT lambda001 = (FT(1) - f_i) * (FT(1) - f_j) * f_k; const FT lambda010 = (FT(1) - f_i) * f_j * (FT(1) - f_k); const FT lambda011 = (FT(1) - f_i) * f_j * f_k; const FT lambda100 = f_i * (FT(1) - f_j) * (FT(1) - f_k); const FT lambda101 = f_i * (FT(1) - f_j) * f_k; const FT lambda110 = f_i * f_j * (FT(1) - f_k); const FT lambda111 = f_i * f_j * f_k; // add weighted corners return vector(x_coord(g000) * lambda000 + x_coord(g001) * lambda001 + x_coord(g010) * lambda010 + x_coord(g011) * lambda011 + x_coord(g100) * lambda100 + x_coord(g101) * lambda101 + x_coord(g110) * lambda110 + x_coord(g111) * lambda111, y_coord(g000) * lambda000 + y_coord(g001) * lambda001 + y_coord(g010) * lambda010 + y_coord(g011) * lambda011 + y_coord(g100) * lambda100 + y_coord(g101) * lambda101 + y_coord(g110) * lambda110 + y_coord(g111) * lambda111, z_coord(g000) * lambda000 + z_coord(g001) * lambda001 + z_coord(g010) * lambda010 + z_coord(g011) * lambda011 + z_coord(g100) * lambda100 + z_coord(g101) * lambda101 + z_coord(g110) * lambda110 + z_coord(g111) * lambda111); } }; #ifndef DOXYGEN_RUNNING // [undocumented] // // \ingroup IS_Fields_helpers_grp // // This can be used for example when we have implicit functions for data (values & gradients), // but use an interpolated values field as to store data. template class Function_evaluation { using Geom_traits = typename Grid::Geom_traits; using FT = typename Geom_traits::FT; using Point_3 = typename Geom_traits::Point_3; using Vector_3 = typename Geom_traits::Vector_3; std::function m_value_fn; std::function m_gradient_fn; public: template Function_evaluation(const ValueFunction& value_fn, const GradientFunction& gradient_fn = [](const Point_3&) -> Vector_3 { return CGAL::NULL_VECTOR; }) : m_value_fn{value_fn}, m_gradient_fn{gradient_fn} { } public: FT interpolated_value(const Point_3& p, const Grid&, const std::vector&) const { return m_value_fn(p); } Vector_3 interpolated_gradient(const Point_3& p, const Grid&, const std::vector&) const { return m_gradient_fn(p); } }; #endif } // namespace Isosurfacing } // namespace CGAL #endif // CGAL_ISOSURFACING_3_INTERNAL_INTERPOLATION_SCHEMES_3_H