diff --git a/.gitattributes b/.gitattributes index 1a62666a782..1ac335562e5 100644 --- a/.gitattributes +++ b/.gitattributes @@ -4109,6 +4109,13 @@ Surface_mesh_segmentation/include/CGAL/mesh_segmentation.h -text Surface_mesh_segmentation/package_info/Surface_mesh_segmentation/copyright -text Surface_mesh_segmentation/package_info/Surface_mesh_segmentation/license.txt -text Surface_mesh_segmentation/package_info/Surface_mesh_segmentation/maintainer -text +Surface_mesh_segmentation/test/Surface_mesh_segmentation/Disk_samplers_test.cpp -text +Surface_mesh_segmentation/test/Surface_mesh_segmentation/Expectation_maximization_test.cpp -text +Surface_mesh_segmentation/test/Surface_mesh_segmentation/Filters_test.cpp -text +Surface_mesh_segmentation/test/Surface_mesh_segmentation/K_means_clustering_test.cpp -text +Surface_mesh_segmentation/test/Surface_mesh_segmentation/Utils.h -text +Surface_mesh_segmentation/test/Surface_mesh_segmentation/data/cactus.off -text +Surface_mesh_segmentation/test/Surface_mesh_segmentation/mesh_segmentation_test.cpp -text Surface_mesh_simplification/doc_tex/OLD[!!-~]Surface_mesh_simplification.tex -text Surface_mesh_simplification/doc_tex/Surface_mesh_simplification/fig/Illustration-Simplification-ALL.jpg -text Surface_mesh_simplification/doc_tex/Surface_mesh_simplification/fig/Illustration-Simplification-ALL.pdf -text svneol=unset#application/pdf diff --git a/Surface_mesh_segmentation/doc/Concepts/SegmentationGeomTraits.h b/Surface_mesh_segmentation/doc/Concepts/SegmentationGeomTraits.h index a5f09afc16d..64966caf0bb 100644 --- a/Surface_mesh_segmentation/doc/Concepts/SegmentationGeomTraits.h +++ b/Surface_mesh_segmentation/doc/Concepts/SegmentationGeomTraits.h @@ -17,7 +17,7 @@ public: /// \name Number type /// @{ /*! -A number type model of FieldWithSqrt (double or float is recommanded) +A number type model of FieldWithSqrt (double or float is recommended) */ typedef Hidden_type NT; /// @} diff --git a/Surface_mesh_segmentation/include/CGAL/internal/Surface_mesh_segmentation/Disk_samplers.h b/Surface_mesh_segmentation/include/CGAL/internal/Surface_mesh_segmentation/Disk_samplers.h index 309fb0628dd..12a4e23de14 100644 --- a/Surface_mesh_segmentation/include/CGAL/internal/Surface_mesh_segmentation/Disk_samplers.h +++ b/Surface_mesh_segmentation/include/CGAL/internal/Surface_mesh_segmentation/Disk_samplers.h @@ -5,6 +5,7 @@ * @brief This file contains 3 sampling methods, which can be used as a template parameter for CGAL::internal::SDF_calculation. */ #include +#include #define CGAL_ANGLE_ST_DEV_DIVIDER 3.0 @@ -40,10 +41,10 @@ namespace internal /** * @brief Uses Vogel's method to sample points from unit-disk. * - * Template parameter @a Tuple should have a constructor which takes 3 double parameters. + * @tparam Tuple should have a constructor which takes 3 double parameters. * @see Disk_samplers.h, SDF_calculation */ -template +template class Vogel_disk_sampling { public: @@ -60,8 +61,7 @@ public: template void operator()(int number_of_points, double cone_angle, - OutputIterator out_it, - bool uniform = false) const { + OutputIterator out_it) const { const double golden_ratio = 3.0 - std::sqrt(5.0); if(uniform) { @@ -116,7 +116,7 @@ public: /** * @brief Uses polar mapping to sample points from unit-disk. * - * Template parameter @a Tuple should have a constructor which takes 3 double parameters. + * @tparam Tuple should have a constructor which takes 3 double parameters. */ template class Polar_disk_sampling @@ -183,7 +183,7 @@ public: /** * @brief Uses concentric mapping to sample points from unit-disk. * - * Template parameter @a Tuple should have a constructor which takes 3 double parameters. + * @tparam Tuple should have a constructor which takes 3 double parameters. */ template class Concentric_disk_sampling @@ -208,7 +208,8 @@ public: const int number_of_points_sqrt = static_cast(std::sqrt( static_cast(number_of_points))); const double length_of_normal = 1.0 / tan(cone_angle / 2.0); - const double fraction = 2.0 / (number_of_points_sqrt -1); + const double fraction = (number_of_points_sqrt == 1) ? 0.0 + : 2.0 / (number_of_points_sqrt -1); // use cone_angle / 3 as one standard deviation while weighting. const double angle_st_dev = cone_angle / CGAL_ANGLE_ST_DEV_DIVIDER; diff --git a/Surface_mesh_segmentation/include/CGAL/internal/Surface_mesh_segmentation/Expectation_maximization.h b/Surface_mesh_segmentation/include/CGAL/internal/Surface_mesh_segmentation/Expectation_maximization.h index 448c588f076..8db05c75077 100644 --- a/Surface_mesh_segmentation/include/CGAL/internal/Surface_mesh_segmentation/Expectation_maximization.h +++ b/Surface_mesh_segmentation/include/CGAL/internal/Surface_mesh_segmentation/Expectation_maximization.h @@ -7,10 +7,12 @@ #include #include +#include -#define CGAL_DEFAULT_MAXIMUM_ITERATION 15 +#define CGAL_DEFAULT_MAXIMUM_ITERATION 10 +#define CGAL_DEFAULT_NUMBER_OF_RUN 15 #define CGAL_DEFAULT_THRESHOLD 1e-3 -#define CGAL_DEFAULT_NUMBER_OF_RUN 20 + #define CGAL_DEFAULT_SEED 1340818006 namespace CGAL diff --git a/Surface_mesh_segmentation/include/CGAL/internal/Surface_mesh_segmentation/K_means_clustering.h b/Surface_mesh_segmentation/include/CGAL/internal/Surface_mesh_segmentation/K_means_clustering.h index 0e151364a94..f2787e5b7df 100644 --- a/Surface_mesh_segmentation/include/CGAL/internal/Surface_mesh_segmentation/K_means_clustering.h +++ b/Surface_mesh_segmentation/include/CGAL/internal/Surface_mesh_segmentation/K_means_clustering.h @@ -142,6 +142,8 @@ public: data_centers.reserve(points.size()); for(std::vector::iterator point_it = points.begin(); point_it != points.end(); ++point_it) { + point_it->calculate_new_center( + centers); // just refind closest center (incase order of centers are changed etc) data_centers.push_back(point_it->center_id); } } diff --git a/Surface_mesh_segmentation/test/Surface_mesh_segmentation/Disk_samplers_test.cpp b/Surface_mesh_segmentation/test/Surface_mesh_segmentation/Disk_samplers_test.cpp new file mode 100644 index 00000000000..b8194b0d645 --- /dev/null +++ b/Surface_mesh_segmentation/test/Surface_mesh_segmentation/Disk_samplers_test.cpp @@ -0,0 +1,63 @@ +#include + +#include +#include + +typedef boost::tuple boost_tuple; + +void print(const std::vector& samples) +{ + const int map_size = 31; + const int map_size_2 = 45; + std::vector > sample_map(map_size, std::vector(map_size_2, false)); + + for(std::vector::const_iterator sample_it = samples.begin(); + sample_it != samples.end(); ++sample_it) + { + double x = (sample_it->get<0>() +1)/2; + double y = (sample_it->get<1>() +1)/2; + x *= (map_size-1); + y *= (map_size_2-1); + int x_c = static_cast(x + 0.49); + int y_c = static_cast(y + 0.49); + sample_map[x_c][y_c] = true; + } + for(int i = 0; i < map_size; ++i) + { + for(int j = 0; j < map_size_2; ++j) + { + if(sample_map[i][j]){ std::cout << "*"; } + else { std::cout << " "; } + } + std::cout << std::endl; + } + std::cout << std::endl; +} +/** + * Uses disk sampling functors to sample points from unit-disk. + * It also prints sampled points for visual debugging. + * + * Note that it always return EXIT_SUCCESS + */ +int main(void) +{ + CGAL::internal::Vogel_disk_sampling sampling_1; + CGAL::internal::Vogel_disk_sampling sampling_2; + CGAL::internal::Polar_disk_sampling sampling_3; + CGAL::internal::Concentric_disk_sampling sampling_4; + + std::vector samples_1; + std::vector samples_2; + std::vector samples_3; + std::vector samples_4; + + sampling_1(64, 2.0 / 3.0 * CGAL_PI, std::back_inserter(samples_1)); + sampling_2(64, 2.0 / 3.0 * CGAL_PI, std::back_inserter(samples_2)); + sampling_3(64, 2.0 / 3.0 * CGAL_PI, std::back_inserter(samples_3)); + sampling_4(64, 2.0 / 3.0 * CGAL_PI, std::back_inserter(samples_4)); + + print(samples_1); + print(samples_2); + print(samples_3); + print(samples_4); +} \ No newline at end of file diff --git a/Surface_mesh_segmentation/test/Surface_mesh_segmentation/Expectation_maximization_test.cpp b/Surface_mesh_segmentation/test/Surface_mesh_segmentation/Expectation_maximization_test.cpp new file mode 100644 index 00000000000..f97aa8657bc --- /dev/null +++ b/Surface_mesh_segmentation/test/Surface_mesh_segmentation/Expectation_maximization_test.cpp @@ -0,0 +1,84 @@ + +#include + +#include +#include +/** + * Generates sample points using a few gauissians. + * Then applies gmm fitting on these generated points. + * Provides a heuristic score for each gmm fitting result. + * + * Note that it always return EXIT_SUCCESS + */ +int main(void) +{ + boost::mt19937 engine; + engine.seed(1340818006); + + // generate random data using gauissians below + std::vector< boost::normal_distribution > distributions; + distributions.push_back(boost::normal_distribution(0.1, 0.05)); + distributions.push_back(boost::normal_distribution(0.4, 0.1)); + distributions.push_back(boost::normal_distribution(0.55, 0.05)); + distributions.push_back(boost::normal_distribution(0.7, 0.1)); + distributions.push_back(boost::normal_distribution(0.9, 0.05)); + distributions.push_back(boost::normal_distribution(1.0, 0.05)); + + std::vector data; + for(std::vector< boost::normal_distribution >::iterator it = distributions.begin(); + it != distributions.end(); ++it) + { + boost::variate_generator > var_nor(engine, *it); + + for(int i = 0; i < 300; ++i) { data.push_back(var_nor()); } + } + + // calculate closest center (using above gauissians) for each generated points + // we will compare it with gmm fitting results + // also we might want to compute mixing coef for each center and select centers according to mixing_coef * prob(data) + std::vector data_centers; + for(std::vector::iterator it = data.begin(); it != data.end(); ++it) + { + int center_id = -1, center_counter = 0;; + double min_distance = (std::numeric_limits::max)(); + for(std::vector< boost::normal_distribution >::iterator dis_it = distributions.begin(); + dis_it != distributions.end(); ++dis_it, ++center_counter) + { + double distance = std::abs(*it - dis_it->mean()); + if(min_distance > distance) + { + min_distance = distance; + center_id = center_counter; + } + } + data_centers.push_back(center_id); + } + + // apply gmm fitting clustering + typedef CGAL::internal::Expectation_maximization E_M; + std::vector gmm_fitters; + gmm_fitters.push_back(E_M(distributions.size(), data, E_M::PLUS_INITIALIZATION)); + gmm_fitters.push_back(E_M(distributions.size(), data, E_M::RANDOM_INITIALIZATION)); + gmm_fitters.push_back(E_M(distributions.size(), data, E_M::K_MEANS_INITIALIZATION)); + + std::vector< std::vector > calculated_centers(gmm_fitters.size()); + std::vector< std::vector >::iterator calc_centers_it = calculated_centers.begin(); + for(std::vector::iterator it = gmm_fitters.begin(); it != gmm_fitters.end(); ++it, ++calc_centers_it) + { + it->fill_with_center_ids(*calc_centers_it); + } + + std::cout << "Compare results of EM with 'expected' (but be aware, it is not optimal result in terms of likelihood)" << std::endl; + std::cout << "Another words a clustering which has higher likelihood can result in worse score in here" << std::endl; + for(std::vector< std::vector >::iterator calc_centers_it = calculated_centers.begin(); + calc_centers_it != calculated_centers.end(); ++calc_centers_it) + { + int true_count = 0; + std::vector::iterator calculated_it = calc_centers_it->begin(); + for(std::vector::iterator it = data_centers.begin(); it != data_centers.end(); ++it, ++calculated_it) + { + if( (*it) == (*calculated_it) ) { ++true_count; } + } + std::cout << "[0,1]: " << static_cast(true_count) / data_centers.size() << std::endl; + } +} \ No newline at end of file diff --git a/Surface_mesh_segmentation/test/Surface_mesh_segmentation/Filters_test.cpp b/Surface_mesh_segmentation/test/Surface_mesh_segmentation/Filters_test.cpp new file mode 100644 index 00000000000..fca96bc8b66 --- /dev/null +++ b/Surface_mesh_segmentation/test/Surface_mesh_segmentation/Filters_test.cpp @@ -0,0 +1,69 @@ +#include + +#include +#include +#include + +#include +#include +#include + +#include "Utils.h" + +typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel; +typedef CGAL::Polyhedron_3 Polyhedron; + +/** + * Uses bilateral and median filtering to smooth associated values with facets. + * It also prints average differences between them (smoothed values with two methods). + * Note that it always return EXIT_SUCCESS if .off file is read successfully. + */ +int main(void) +{ + Polyhedron mesh; + if( !read_to_polyhedron("./data/cactus.off", mesh) ) { return 1; } + + typedef std::map< typename Polyhedron::Facet_const_handle, double> Facet_double_map; + Facet_double_map internal_1; + boost::associative_property_map value_pmap_1(internal_1); + + Facet_double_map internal_2; + boost::associative_property_map value_pmap_2(internal_2); + + double counter = 0.0; + for(Polyhedron::Facet_const_iterator facet_it = mesh.facets_begin(); + facet_it != mesh.facets_end(); ++facet_it, ++counter) + { + value_pmap_1[facet_it] = value_pmap_2[facet_it] = counter; + } + const double average_value = counter / 2.0; + + CGAL::internal::Bilateral_filtering > filter_1; + CGAL::internal::Bilateral_filtering > filter_2; + CGAL::internal::Median_filtering > filter_3; + CGAL::internal::Median_filtering > filter_4; + + filter_1(mesh, 2, value_pmap_1); + filter_3(mesh, 2, value_pmap_2); + + double average_dif = 0.0; + for(Polyhedron::Facet_const_iterator facet_it = mesh.facets_begin(); + facet_it != mesh.facets_end(); ++facet_it) + { + average_dif += std::abs(value_pmap_1[facet_it] - value_pmap_2[facet_it]); + } + average_dif = (average_dif / mesh.size_of_facets()) / average_value; + std::cout << "average differences between bilateral and median filters: " << average_dif << std::endl; + + filter_2(mesh, 2, value_pmap_1); + filter_4(mesh, 2, value_pmap_2); + + average_dif = 0.0; + for(Polyhedron::Facet_const_iterator facet_it = mesh.facets_begin(); + facet_it != mesh.facets_end(); ++facet_it) + { + average_dif += std::abs(value_pmap_1[facet_it] - value_pmap_2[facet_it]); + } + average_dif = (average_dif / mesh.size_of_facets()) / average_value; + std::cout << "average differences between bilateral and median filters (2) :" << average_dif << std::endl; +} \ No newline at end of file diff --git a/Surface_mesh_segmentation/test/Surface_mesh_segmentation/K_means_clustering_test.cpp b/Surface_mesh_segmentation/test/Surface_mesh_segmentation/K_means_clustering_test.cpp new file mode 100644 index 00000000000..ed54527d4bb --- /dev/null +++ b/Surface_mesh_segmentation/test/Surface_mesh_segmentation/K_means_clustering_test.cpp @@ -0,0 +1,84 @@ + +#include + +#include +#include +/** + * Generates sample points using a few gauissians. + * Then applies k-means on these generated points. + * Provides a heuristic score for each k-means clustering result. + * + * Note that it always return EXIT_SUCCESS + */ +int main(void) +{ + boost::mt19937 engine; + engine.seed(1340818006); + + // generate random data using gauissians below + std::vector< boost::normal_distribution > distributions; + distributions.push_back(boost::normal_distribution(0.1, 0.05)); + distributions.push_back(boost::normal_distribution(0.4, 0.1)); + distributions.push_back(boost::normal_distribution(0.55, 0.05)); + distributions.push_back(boost::normal_distribution(0.7, 0.1)); + distributions.push_back(boost::normal_distribution(0.9, 0.05)); + distributions.push_back(boost::normal_distribution(1.0, 0.05)); + + std::vector data; + for(std::vector< boost::normal_distribution >::iterator it = distributions.begin(); + it != distributions.end(); ++it) + { + boost::variate_generator > var_nor(engine, *it); + + for(int i = 0; i < 300; ++i) { data.push_back(var_nor()); } + } + + // calculate closest center (using above gauissians) for each generated points + // we will compare it with k-means results + std::vector data_centers; + for(std::vector::iterator it = data.begin(); it != data.end(); ++it) + { + int center_id = -1, center_counter = 0;; + double min_distance = (std::numeric_limits::max)(); + for(std::vector< boost::normal_distribution >::iterator dis_it = distributions.begin(); + dis_it != distributions.end(); ++dis_it, ++center_counter) + { + double distance = std::abs(*it - dis_it->mean()); + if(min_distance > distance) + { + min_distance = distance; + center_id = center_counter; + } + } + data_centers.push_back(center_id); + } + + // apply k-means clustering + typedef CGAL::internal::K_means_clustering K_means; + std::vector k_means; + k_means.push_back(K_means(distributions.size(), data, K_means::PLUS_INITIALIZATION)); + k_means.push_back(K_means(distributions.size(), data, K_means::PLUS_INITIALIZATION, 2, 5)); + k_means.push_back(K_means(distributions.size(), data, K_means::RANDOM_INITIALIZATION)); + k_means.push_back(K_means(distributions.size(), data, K_means::RANDOM_INITIALIZATION, 2, 5)); + + std::vector< std::vector > calculated_centers(k_means.size()); + std::vector< std::vector >::iterator calc_centers_it = calculated_centers.begin(); + for(std::vector::iterator it = k_means.begin(); it != k_means.end(); ++it, ++calc_centers_it) + { + it->fill_with_center_ids(*calc_centers_it); + } + + std::cout << "Compare results of k-means with 'expected' (but be aware, it is not optimal result in terms of within-cluster error)" << std::endl; + std::cout << "Another words a clustering which has smaller within-cluster error can result in worse score in here" << std::endl; + for(std::vector< std::vector >::iterator calc_centers_it = calculated_centers.begin(); + calc_centers_it != calculated_centers.end(); ++calc_centers_it) + { + int true_count = 0; + std::vector::iterator calculated_it = calc_centers_it->begin(); + for(std::vector::iterator it = data_centers.begin(); it != data_centers.end(); ++it, ++calculated_it) + { + if( (*it) == (*calculated_it) ) { ++true_count; } + } + std::cout << "[0,1]: " << static_cast(true_count) / data_centers.size() << std::endl; + } +} \ No newline at end of file diff --git a/Surface_mesh_segmentation/test/Surface_mesh_segmentation/Utils.h b/Surface_mesh_segmentation/test/Surface_mesh_segmentation/Utils.h new file mode 100644 index 00000000000..278bde22ba3 --- /dev/null +++ b/Surface_mesh_segmentation/test/Surface_mesh_segmentation/Utils.h @@ -0,0 +1,14 @@ +#include +#include + +template +bool read_to_polyhedron(const char* file_name, Polyhedron& mesh) +{ + std::ifstream input(file_name); + + if ( !input || !(input >> mesh) || mesh.empty() ){ + std::cerr << "Problem occured while reading off file"; + return false; + } + return true; +} \ No newline at end of file diff --git a/Surface_mesh_segmentation/test/Surface_mesh_segmentation/data/cactus.off b/Surface_mesh_segmentation/test/Surface_mesh_segmentation/data/cactus.off new file mode 100644 index 00000000000..dccf6ff1d94 --- /dev/null +++ b/Surface_mesh_segmentation/test/Surface_mesh_segmentation/data/cactus.off @@ -0,0 +1,1858 @@ +COFF +620 1236 0 +0.0687881 0.0462836 -0.0243483 192 192 192 255 +0.0693177 0.0983505 -0.0229785 192 192 192 255 +0.0742077 0.0970074 0.0227047 192 192 192 255 +-0.0137787 0.0896632 0.102572 192 192 192 255 +-0.0141075 0.0377467 0.10111 192 192 192 255 +0.0442229 0.0520837 0.0730379 192 192 192 255 +0.0731218 -0.00791628 -0.0241032 192 192 192 255 +0.0736746 0.0449508 0.0212312 192 192 192 255 +-0.0144328 -0.0141328 0.0996224 192 192 192 255 +0.0439647 0.000203561 0.0714978 192 192 192 255 +-0.0134459 0.141608 0.103987 192 192 192 255 +0.0446247 0.103982 0.074462 192 192 192 255 +0.0792188 -0.0130141 0.0189334 192 192 192 255 +0.0876295 -0.0534697 0.0406037 192 192 192 255 +0.115025 -0.0535801 0.0385144 192 192 192 255 +0.0425568 -0.0505954 0.0711122 192 192 192 255 +0.0396734 -0.105824 0.0738447 192 192 192 255 +0.0872369 -0.0745478 0.0375566 192 192 192 255 +-0.0147383 -0.0659697 0.0980082 192 192 192 255 +-0.0131311 0.193483 0.105531 192 192 192 255 +0.0446195 0.155727 0.0762611 192 192 192 255 +0.0696887 0.201989 -0.0198252 192 192 192 255 +0.070162 0.253959 -0.0184283 192 192 192 255 +0.0750453 0.252618 0.0271907 192 192 192 255 +0.12866 -0.0173473 0.0135135 192 192 192 255 +0.138964 -0.063338 0.0326563 192 192 192 255 +0.169944 -0.063032 0.0285597 192 192 192 255 +0.16296 -0.00112525 0.0103189 192 192 192 255 +-0.118043 0.0792531 0.0665376 192 192 192 255 +-0.125169 0.0420742 0.0437557 192 192 192 255 +-0.0935767 0.0507828 0.0670308 192 192 192 255 +-0.0150649 -0.117897 0.0965662 192 192 192 255 +-0.012812 0.245353 0.107063 192 192 192 255 +0.0448713 0.207606 0.077811 192 192 192 255 +-0.0820199 0.106338 -0.0673941 192 192 192 255 +-0.0261335 0.118321 -0.088811 192 192 192 255 +-0.026456 0.0664254 -0.0903025 192 192 192 255 +-0.144001 0.102869 0.0729693 192 192 192 255 +-0.138296 0.0830442 0.0651689 192 192 192 255 +-0.0153919 -0.169813 0.0951051 192 192 192 255 +0.0429334 -0.157762 0.0670662 192 192 192 255 +-0.0124867 0.297265 0.108518 192 192 192 255 +0.0454925 0.259641 0.0790309 192 192 192 255 +-0.0819163 0.0544185 -0.0688636 192 192 192 255 +-0.0267789 0.0145277 -0.0917938 192 192 192 255 +-0.0817353 0.157816 -0.0659925 192 192 192 255 +-0.0258108 0.17022 -0.0873196 192 192 192 255 +0.180838 -0.0310076 -0.0648372 192 192 192 255 +0.190214 -0.0510045 -0.0673738 192 192 192 255 +0.151983 -0.0508139 -0.065735 192 192 192 255 +0.0516338 -0.154179 -0.0620501 192 192 192 255 +0.0528623 -0.1256 -0.0625319 192 192 192 255 +0.0791092 -0.129155 -0.0367077 192 192 192 255 +0.0519553 -0.102281 -0.0605569 192 192 192 255 +0.0869425 -0.0909425 -0.0516508 192 192 192 255 +0.0704524 0.30585 -0.0169153 192 192 192 255 +0.0709044 0.357805 -0.0155057 192 192 192 255 +0.0757929 0.356462 0.030164 192 192 192 255 +0.270914 0.0258805 0.0235778 192 192 192 255 +0.234313 0.0481874 0.00807587 192 192 192 255 +0.221335 -0.00192611 0.0255526 192 192 192 255 +0.188021 0.0132503 0.000887512 192 192 192 255 +0.184127 -0.00843912 0.0201741 192 192 192 255 +0.130419 -0.104291 -0.0410464 192 192 192 255 +0.182649 -0.0826576 -0.046424 192 192 192 255 +0.185957 -0.0835659 -0.0155288 192 192 192 255 +0.081876 -0.129915 -0.010859 192 192 192 255 +0.136795 -0.105328 0.00933771 192 192 192 255 +-0.172137 0.155773 0.0522931 192 192 192 255 +-0.183493 0.0985624 0.0733187 192 192 192 255 +-0.0157164 -0.221731 0.0936269 192 192 192 255 +0.0424521 -0.207528 0.0657439 192 192 192 255 +-0.0121802 0.34911 0.110115 192 192 192 255 +0.0457416 0.311518 0.0805857 192 192 192 255 +-0.0953648 0.037092 -0.0482713 192 192 192 255 +-0.138674 0.0530188 -1.71757e-005 192 192 192 255 +-0.128834 0.105875 -0.0349372 192 192 192 255 +-0.0824243 0.00252114 -0.0705867 192 192 192 255 +-0.0271017 -0.03737 -0.0932854 192 192 192 255 +-0.0810271 0.21016 -0.0645491 192 192 192 255 +-0.0254881 0.222115 -0.0858281 192 192 192 255 +0.231297 -0.0566258 -0.0487631 192 192 192 255 +0.239625 -0.0555291 0.00022802 192 192 192 255 +0.0675869 0.44552 0.0336612 192 192 192 255 +0.0556812 0.47019 0.0225751 192 192 192 255 +0.0401628 0.465411 0.0697405 192 192 192 255 +-0.153958 0.105935 -0.0315913 192 192 192 255 +-0.0965975 -0.0068118 -0.0483425 192 192 192 255 +-0.118105 -0.0462405 -0.0131592 192 192 192 255 +-0.11305 -0.0476287 0.0340594 192 192 192 255 +-0.112438 0.00466956 0.0353789 192 192 192 255 +-0.102878 0.157644 -0.034557 192 192 192 255 +-0.128273 0.129084 -0.0303938 192 192 192 255 +-0.0160522 -0.273651 0.0922118 192 192 192 255 +0.0424322 -0.259253 0.0639645 192 192 192 255 +-0.0155023 0.404333 0.110141 192 192 192 255 +0.0461412 0.363323 0.0820465 192 192 192 255 +-0.0826718 -0.0493737 -0.0719832 192 192 192 255 +-0.0274245 -0.0892674 -0.0947767 192 192 192 255 +-0.0807927 0.262005 -0.0631028 192 192 192 255 +-0.0251652 0.274015 -0.0843367 192 192 192 255 +0.240013 0.0639383 -0.00266818 192 192 192 255 +0.284301 0.0497471 0.0212936 192 192 192 255 +0.0665535 -0.316931 -0.0347982 192 192 192 255 +0.0670269 -0.264967 -0.0334012 192 192 192 255 +0.0719154 -0.26631 0.0122672 192 192 192 255 +-0.265932 0.123498 0.0598938 192 192 192 255 +-0.229884 0.135825 0.0759414 192 192 192 255 +-0.243244 0.155196 0.0809558 192 192 192 255 +-0.205546 0.174771 0.0454903 192 192 192 255 +-0.156185 0.162507 0.0354266 192 192 192 255 +-0.0964122 -0.0584883 -0.0504546 192 192 192 255 +-0.118462 -0.0981441 -0.0146472 192 192 192 255 +-0.113405 -0.0995331 0.032588 192 192 192 255 +-0.098808 0.196454 -0.0381918 192 192 192 255 +-0.0163576 -0.325487 0.0905976 192 192 192 255 +0.0418257 -0.31127 0.0627257 192 192 192 255 +-0.0830202 -0.101275 -0.0735021 192 192 192 255 +-0.0277473 -0.141164 -0.0962684 192 192 192 255 +-0.0804474 0.313905 -0.0615833 192 192 192 255 +-0.0248425 0.32591 -0.0828452 192 192 192 255 +0.312089 0.0255569 -0.0570975 192 192 192 255 +0.289012 -0.00354817 -0.0548862 192 192 192 255 +0.25624 0.0247564 -0.0752818 192 192 192 255 +0.232696 0.0216512 -0.0697426 192 192 192 255 +0.25345 0.000697691 -0.0726988 192 192 192 255 +0.284443 0.0754296 -0.0757003 192 192 192 255 +0.29376 0.0524773 -0.0757543 192 192 192 255 +0.0542042 0.416662 -0.0444294 192 192 192 255 +0.0512628 0.439363 -0.0399537 192 192 192 255 +0.061866 0.446841 -0.0179252 192 192 192 255 +0.231334 0.0562887 -0.0470648 192 192 192 255 +0.263804 0.103099 -0.0233002 192 192 192 255 +0.314882 0.0247896 -0.0310003 192 192 192 255 +0.334068 0.0502359 -0.00648696 192 192 192 255 +0.31761 0.0240396 -0.00549577 192 192 192 255 +0.286403 0.0919012 0.0184422 192 192 192 255 +0.343076 0.067659 -0.0155966 192 192 192 255 +0.338364 0.0952823 0.00774245 192 192 192 255 +-0.253317 0.104694 0.0330968 192 192 192 255 +-0.239163 0.100382 0.0604342 192 192 192 255 +-0.0968729 -0.110431 -0.0517765 192 192 192 255 +-0.0948363 0.252744 -0.0410657 192 192 192 255 +-0.11628 0.265098 -0.00419969 192 192 192 255 +-0.111221 0.26371 0.0430743 192 192 192 255 +-0.110858 0.315616 0.0445406 192 192 192 255 +-0.0166823 -0.377404 0.0891451 192 192 192 255 +0.041574 -0.36315 0.0611755 192 192 192 255 +-0.0833376 -0.153171 -0.0749852 192 192 192 255 +-0.02807 -0.193061 -0.0977596 192 192 192 255 +-0.0802078 0.365758 -0.060134 192 192 192 255 +-0.0245281 0.377572 -0.0811281 192 192 192 255 +0.26102 0.103865 -0.0493285 192 192 192 255 +0.285058 0.113557 -0.0710697 192 192 192 255 +0.0038141 0.495842 -0.0375496 192 192 192 255 +0.0250397 0.464958 -0.0504999 192 192 192 255 +0.00528111 0.449084 -0.0640416 192 192 192 255 +0.266542 0.102346 0.00227345 192 192 192 255 +0.284628 0.143016 0.00619197 192 192 192 255 +0.0657988 -0.420786 -0.0377121 192 192 192 255 +0.0662665 -0.36882 -0.0363113 192 192 192 255 +0.0711483 -0.370162 0.00929558 192 192 192 255 +-0.305443 0.156728 0.041143 192 192 192 255 +-0.294654 0.14234 0.0188078 192 192 192 255 +-0.268007 0.124069 0.0405231 192 192 192 255 +-0.306083 0.176525 0.0657507 192 192 192 255 +-0.276514 0.146439 0.077842 192 192 192 255 +-0.272252 0.183327 0.0863042 192 192 192 255 +-0.0971654 -0.162351 -0.0533068 192 192 192 255 +-0.119151 -0.201972 -0.0176262 192 192 192 255 +-0.114093 -0.203361 0.0296311 192 192 192 255 +-0.113712 -0.151412 0.0310862 192 192 192 255 +-0.0944187 0.304634 -0.0396906 192 192 192 255 +-0.0170053 -0.429288 0.0876374 192 192 192 255 +0.0413601 -0.414974 0.0595957 192 192 192 255 +-0.0836803 -0.205077 -0.0764945 192 192 192 255 +-0.0283927 -0.244958 -0.0992514 192 192 192 255 +-0.083712 0.417187 -0.0496556 192 192 192 255 +-0.0210439 0.42484 -0.0768905 192 192 192 255 +0.275609 0.147713 -0.0433352 192 192 192 255 +0.291151 0.202885 0.00602406 192 192 192 255 +-0.0696717 0.498969 0.0183484 192 192 192 255 +-0.0663328 0.498051 0.0495412 192 192 192 255 +-0.0145088 0.515743 0.0468879 192 192 192 255 +-0.296419 0.148536 0.0638931 192 192 192 255 +-0.327391 0.248222 0.0885079 192 192 192 255 +-0.327601 0.199465 0.0707889 192 192 192 255 +-0.292372 0.198414 0.0849591 192 192 192 255 +-0.0977132 -0.214412 -0.0545258 192 192 192 255 +-0.1196 -0.253917 -0.0191054 192 192 192 255 +-0.114536 -0.255308 0.0282148 192 192 192 255 +-0.0945316 0.356351 -0.0376669 192 192 192 255 +-0.115594 0.368986 -0.00121887 192 192 192 255 +-0.110535 0.367595 0.0460359 192 192 192 255 +-0.105819 0.423305 0.0448332 192 192 192 255 +-0.0173254 -0.481192 0.0861274 192 192 192 255 +0.0407744 -0.467032 0.0583399 192 192 192 255 +-0.0840605 -0.256968 -0.078069 192 192 192 255 +-0.0287155 -0.296855 -0.100742 192 192 192 255 +-0.0762033 0.464234 -0.0416 192 192 192 255 +-0.0287869 0.470114 -0.060084 192 192 192 255 +0.286821 0.208037 -0.0512297 192 192 192 255 +0.291255 0.254321 0.00823114 192 192 192 255 +-0.095231 0.467517 0.0257632 192 192 192 255 +-0.0870799 0.466499 0.0594163 192 192 192 255 +-0.0980081 0.468278 -0.000181472 192 192 192 255 +0.354051 0.112305 -0.0590388 192 192 192 255 +0.363149 0.155441 -0.0587441 192 192 192 255 +0.366089 0.154633 -0.031273 192 192 192 255 +0.347208 0.181701 0.0196339 192 192 192 255 +0.337392 0.153452 0.0160167 192 192 192 255 +0.368673 0.153924 -0.00714221 192 192 192 255 +0.372989 0.182343 -0.00676861 192 192 192 255 +0.375801 0.205798 -0.0063799 192 192 192 255 +0.347536 0.205159 0.021999 192 192 192 255 +-0.327515 0.297325 0.0939329 192 192 192 255 +-0.276453 0.24872 0.0811722 192 192 192 255 +-0.0983831 -0.266397 -0.0555889 192 192 192 255 +-0.110632 0.424627 -0.000113851 192 192 192 255 +-0.0176655 -0.53315 0.0847587 192 192 192 255 +0.0407718 -0.518766 0.0565523 192 192 192 255 +-0.0843095 -0.308862 -0.0794667 192 192 192 255 +-0.0290381 -0.348754 -0.102235 192 192 192 255 +0.339549 0.112369 -0.0702856 192 192 192 255 +0.287143 0.260167 -0.0502651 192 192 192 255 +0.291592 0.306181 0.00976541 192 192 192 255 +0.369963 0.183173 -0.0350387 192 192 192 255 +0.367464 0.183858 -0.0583706 192 192 192 255 +0.347761 0.231234 0.0233444 192 192 192 255 +0.376968 0.237882 -0.00556146 192 192 192 255 +0.37765 0.257692 -0.00505207 192 192 192 255 +0.347982 0.257023 0.0246383 192 192 192 255 +0.325319 0.25721 0.023037 192 192 192 255 +0.348139 0.282561 0.025372 192 192 192 255 +0.0650324 -0.576368 -0.0423125 192 192 192 255 +0.0654063 -0.524451 -0.040853 192 192 192 255 +0.0702942 -0.525793 0.00481068 192 192 192 255 +-0.31389 0.271653 -0.0026996 192 192 192 255 +-0.274635 0.268744 0.00422148 192 192 192 255 +-0.27811 0.223326 -0.0103477 192 192 192 255 +-0.322725 0.337306 0.0980687 192 192 192 255 +-0.272804 0.310987 0.0689676 192 192 192 255 +-0.277004 0.317174 0.00993515 192 192 192 255 +-0.276923 0.368694 0.0118807 192 192 192 255 +-0.272756 0.362863 0.0703697 192 192 192 255 +-0.0982019 -0.31808 -0.0576976 192 192 192 255 +-0.120126 -0.357654 -0.0220996 192 192 192 255 +-0.115067 -0.359044 0.0251609 192 192 192 255 +-0.114708 -0.307137 0.0266287 192 192 192 255 +-0.017982 -0.585025 0.0832263 192 192 192 255 +0.0403793 -0.570677 0.0551179 192 192 192 255 +-0.0846549 -0.360763 -0.0809859 192 192 192 255 +-0.0293609 -0.40065 -0.103726 192 192 192 255 +0.336646 0.208151 -0.0797295 192 192 192 255 +0.354916 0.216684 -0.0736627 192 192 192 255 +0.34168 0.275459 -0.077389 192 192 192 255 +0.336748 0.233927 -0.0795398 192 192 192 255 +0.287476 0.312073 -0.0487786 192 192 192 255 +0.291915 0.358077 0.0112569 192 192 192 255 +0.371382 0.207012 -0.0476486 192 192 192 255 +0.372826 0.249018 -0.0471981 192 192 192 255 +0.377853 0.290339 -0.00411382 192 192 192 255 +0.377974 0.30959 -0.00356063 192 192 192 255 +0.348303 0.308921 0.0261297 192 192 192 255 +0.325641 0.309109 0.0245282 192 192 192 255 +0.348462 0.334458 0.0268635 192 192 192 255 +0.0639936 -0.629039 -0.0433695 192 192 192 255 +0.0699175 -0.577711 0.00332447 192 192 192 255 +-0.311788 0.313887 -0.00376917 192 192 192 255 +-0.352347 0.260807 0.0446065 192 192 192 255 +-0.346617 0.250992 0.0722789 192 192 192 255 +-0.351601 0.285923 0.0738392 192 192 192 255 +-0.356436 0.322132 0.0754221 192 192 192 255 +-0.277885 0.425944 0.0160984 192 192 192 255 +-0.273386 0.422433 0.0667834 192 192 192 255 +-0.0986362 -0.369988 -0.0590533 192 192 192 255 +-0.0221851 -0.633465 0.0808643 192 192 192 255 +0.040081 -0.622537 0.0535825 192 192 192 255 +-0.0849483 -0.412654 -0.0824427 192 192 192 255 +-0.0296836 -0.452547 -0.105218 192 192 192 255 +0.342002 0.327356 -0.0758975 192 192 192 255 +0.287786 0.363943 -0.0472639 192 192 192 255 +0.292391 0.410207 0.0124571 192 192 192 255 +0.378175 0.342237 -0.00262248 192 192 192 255 +0.378295 0.361485 -0.00206927 192 192 192 255 +0.348625 0.360817 0.0276209 192 192 192 255 +0.325962 0.361005 0.0260197 192 192 192 255 +0.348764 0.386571 0.0281515 192 192 192 255 +0.0593513 -0.674229 -0.0418701 192 192 192 255 +0.0688385 -0.630368 0.00189162 192 192 192 255 +0.0601524 -0.696552 0.000875256 192 192 192 255 +0.0639497 -0.675492 0.00108818 192 192 192 255 +0.03305 -0.662979 0.056085 192 192 192 255 +-0.357614 0.373521 0.0770592 192 192 192 255 +-0.341328 0.354321 0.0928586 192 192 192 255 +-0.322421 0.375802 0.0997874 192 192 192 255 +-0.0987488 -0.421804 -0.0607996 192 192 192 255 +-0.120685 -0.461404 -0.0250906 192 192 192 255 +-0.115631 -0.462793 0.0221265 192 192 192 255 +-0.115298 -0.410903 0.0236122 192 192 192 255 +-0.0207604 -0.682656 0.0742903 192 192 192 255 +-0.0852717 -0.464562 -0.0839252 192 192 192 255 +-0.0300063 -0.504443 -0.106708 192 192 192 255 +0.342322 0.379138 -0.0742975 192 192 192 255 +0.0187397 -0.645419 -0.0976642 192 192 192 255 +0.0466863 -0.647954 -0.0739124 192 192 192 255 +0.0450776 -0.67325 -0.072839 192 192 192 255 +0.020717 -0.618746 -0.0983649 192 192 192 255 +0.0486812 -0.621257 -0.0754133 192 192 192 255 +0.37819 0.393824 -0.00110694 192 192 192 255 +0.378114 0.413384 -0.000523671 192 192 192 255 +0.348905 0.412726 0.0287056 192 192 192 255 +0.293802 0.429134 0.00128234 192 192 192 255 +0.326596 0.412911 0.0271287 192 192 192 255 +0.0518893 -0.726616 -0.0247249 192 192 192 255 +0.0568714 -0.695652 -0.0297743 192 192 192 255 +-0.333786 0.314044 -0.00449559 192 192 192 255 +-0.361648 0.313412 0.0234859 192 192 192 255 +-0.362273 0.333887 0.024155 192 192 192 255 +-0.363295 0.365314 0.0251883 192 192 192 255 +-0.333624 0.365984 -0.00450206 192 192 192 255 +-0.333703 0.339637 -0.00447574 192 192 192 255 +-0.356943 0.415694 0.0782276 192 192 192 255 +-0.359046 0.41627 0.0585833 192 192 192 255 +-0.359674 0.374086 0.0578219 192 192 192 255 +-0.362977 0.384761 0.0257262 192 192 192 255 +-0.340954 0.406139 0.0942834 192 192 192 255 +-0.32221 0.414835 0.100607 192 192 192 255 +-0.0991636 -0.473813 -0.0621814 192 192 192 255 +-0.121188 -0.51339 -0.0265654 192 192 192 255 +-0.116124 -0.514779 0.020743 192 192 192 255 +-0.0270016 -0.728676 0.0639687 192 192 192 255 +-0.00032835 -0.728687 0.0586437 192 192 192 255 +-0.0856697 -0.516459 -0.0855132 192 192 192 255 +-0.0303292 -0.556344 -0.108199 192 192 192 255 +0.289021 0.422683 -0.0441313 192 192 192 255 +0.342626 0.427835 -0.069632 192 192 192 255 +0.374763 0.352815 -0.0348077 192 192 192 255 +0.374722 0.404548 -0.0328719 192 192 192 255 +-0.362468 0.41721 0.0266259 192 192 192 255 +-0.333257 0.417869 -0.00260354 192 192 192 255 +-0.333441 0.392137 -0.00355138 192 192 192 255 +-0.310946 0.417684 -0.0010262 192 192 192 255 +-0.323313 0.437119 0.00342402 192 192 192 255 +-0.294759 0.451543 0.0289953 192 192 192 255 +-0.323308 0.466219 0.0748984 192 192 192 255 +-0.0999928 -0.525923 -0.0630538 192 192 192 255 +-0.0859683 -0.568354 -0.0869768 192 192 192 255 +-0.030652 -0.608239 -0.109691 192 192 192 255 +-0.100147 -0.577747 -0.0647504 192 192 192 255 +-0.121798 -0.617172 -0.0295518 192 192 192 255 +-0.116736 -0.618562 0.0177372 192 192 192 255 +-0.11641 -0.566667 0.0192269 192 192 192 255 +-0.0861106 -0.620069 -0.0884852 192 192 192 255 +-0.02842 -0.664856 -0.106633 192 192 192 255 +-0.0982116 -0.627037 -0.0689489 192 192 192 255 +-0.083587 -0.724308 -0.0756849 192 192 192 255 +-0.108043 -0.725349 -0.0342048 192 192 192 255 +-0.111358 -0.705617 -0.0332698 192 192 192 255 +0.0742858 0.148772 0.0242185 192 192 192 255 +0.0530383 0.0807123 -0.05523 192 192 192 255 +0.0528566 0.0534079 -0.0559997 192 192 192 255 +0.0248918 0.0558973 -0.0789594 192 192 192 255 +0.0531489 0.105304 -0.05447 192 192 192 255 +0.0251891 0.10777 -0.0774495 192 192 192 255 +0.0694086 0.150111 -0.0213437 192 192 192 255 +0.0745634 0.200651 0.0257142 192 192 192 255 +-0.0666307 0.047163 0.0906178 192 192 192 255 +-0.066767 0.0990123 0.0922082 192 192 192 255 +0.0524411 0.0284981 -0.0563923 192 192 192 255 +0.05209 0.00149723 -0.0569411 192 192 192 255 +0.0245935 0.00403626 -0.0804783 192 192 192 255 +0.0532669 0.1325 -0.0536256 192 192 192 255 +0.0534287 0.157201 -0.0529258 192 192 192 255 +0.025453 0.159616 -0.0759108 192 192 192 255 +0.0862221 -0.111747 0.029174 192 192 192 255 +-0.0672662 -0.00499542 0.0893549 192 192 192 255 +-0.0683913 0.149192 0.0928333 192 192 192 255 +0.0906196 -0.0460774 -0.057403 192 192 192 255 +0.0515905 -0.0240032 -0.0572511 192 192 192 255 +0.0548651 -0.0503094 -0.0622716 192 192 192 255 +0.0239513 -0.0483569 -0.081585 192 192 192 255 +0.053649 0.184467 -0.052205 192 192 192 255 +0.0537942 0.209097 -0.0514872 192 192 192 255 +0.0258376 0.211568 -0.0744669 192 192 192 255 +0.124005 -0.0160689 -0.0299701 192 192 192 255 +0.190373 -0.0617101 0.0250562 192 192 192 255 +0.117087 -0.0754872 0.035161 192 192 192 255 +0.0846327 -0.130671 0.0148941 192 192 192 255 +0.0722215 -0.162688 0.0152813 192 192 192 255 +0.0753336 0.304509 0.0286857 192 192 192 255 +-0.0949182 0.0734246 0.0695199 192 192 192 255 +-0.107501 0.107616 0.0724633 192 192 192 255 +-0.0674624 -0.0567855 0.0877683 192 192 192 255 +-0.0658303 0.202726 0.095241 192 192 192 255 +0.12909 -0.0419913 -0.0601506 192 192 192 255 +0.0543386 -0.0723783 -0.0624235 192 192 192 255 +0.0244903 -0.0995332 -0.0826869 192 192 192 255 +0.0539529 0.236342 -0.0506909 192 192 192 255 +0.0541517 0.260997 -0.0500388 192 192 192 255 +0.0261856 0.263489 -0.0729955 192 192 192 255 +0.160189 -0.000364206 -0.0155643 192 192 192 255 +0.171602 0.00520441 -0.0454905 192 192 192 255 +0.242623 -0.0123451 0.0239248 192 192 192 255 +0.21886 -0.0259754 0.0277432 192 192 192 255 +0.188173 -0.0841749 0.00517801 192 192 192 255 +0.0673513 -0.161349 -0.0302165 192 192 192 255 +0.0721197 -0.214451 0.0137701 192 192 192 255 +-0.166792 0.0646174 0.0411962 192 192 192 255 +-0.0939525 0.0230049 0.0664843 192 192 192 255 +-0.0955369 -0.00116283 0.0675702 192 192 192 255 +-0.0935888 0.154558 0.0708301 192 192 192 255 +-0.115482 0.157909 0.0423464 192 192 192 255 +-0.137284 0.151948 0.0469589 192 192 192 255 +-0.0678277 -0.108719 0.0863061 192 192 192 255 +-0.0656201 0.254518 0.0967845 192 192 192 255 +0.149801 -0.0301049 -0.0622761 192 192 192 255 +0.0236538 -0.151639 -0.0849112 192 192 192 255 +0.0543027 0.28827 -0.0492318 192 192 192 255 +0.0544382 0.312892 -0.0485027 192 192 192 255 +0.0264706 0.315353 -0.0714737 192 192 192 255 +0.294769 -0.00445194 -0.00413386 192 192 192 255 +0.0672376 -0.213111 -0.0318383 192 192 192 255 +0.0748775 0.407875 0.031774 192 192 192 255 +0.0435507 0.413472 0.0859252 192 192 192 255 +-0.171643 0.06595 -0.00412926 192 192 192 255 +-0.197529 0.0783357 0.0512435 192 192 192 255 +-0.125439 0.0355048 -0.00120202 192 192 192 255 +-0.117476 0.00605202 -0.0116887 192 192 192 255 +-0.0956551 -0.0304756 0.0666483 192 192 192 255 +-0.0957462 -0.0530572 0.0659366 192 192 192 255 +-0.124823 0.154556 -0.00474233 192 192 192 255 +-0.0939011 0.177644 0.0720574 192 192 192 255 +-0.0941484 0.206429 0.0734152 192 192 192 255 +-0.11143 0.211864 0.0415114 192 192 192 255 +-0.0681404 -0.160608 0.0848078 192 192 192 255 +-0.0652593 0.306444 0.0982509 192 192 192 255 +0.232237 0.000850231 -0.0734152 192 192 192 255 +0.203029 -0.0284293 -0.0697271 192 192 192 255 +0.05141 -0.178792 -0.0626695 192 192 192 255 +0.0512122 -0.206079 -0.0634187 192 192 192 255 +0.0232431 -0.203621 -0.0863895 192 192 192 255 +0.0546603 0.340208 -0.0477822 192 192 192 255 +0.0548614 0.364792 -0.0471355 192 192 192 255 +0.0268772 0.367306 -0.0700501 192 192 192 255 +0.069924 0.40913 -0.0131977 192 192 192 255 +0.294353 0.0288621 0.0181675 192 192 192 255 +0.0714336 -0.31827 0.0107908 192 192 192 255 +-0.180318 0.106 -0.0281028 192 192 192 255 +-0.200342 0.0791085 0.0249653 192 192 192 255 +-0.203053 0.079853 -0.000358496 192 192 192 255 +-0.230882 0.0893036 0.0130591 192 192 192 255 +-0.220843 0.155097 0.0795761 192 192 192 255 +-0.164893 0.164373 -0.00281527 192 192 192 255 +-0.0959498 -0.0823394 0.0651214 192 192 192 255 +-0.096105 -0.104955 0.0644916 192 192 192 255 +-0.116483 0.213252 -0.00570266 192 192 192 255 +-0.0940592 0.228991 0.074125 192 192 192 255 +-0.0938928 0.258325 0.0749879 192 192 192 255 +-0.0684925 -0.212537 0.0833396 192 192 192 255 +-0.0650446 0.358249 0.0998254 192 192 192 255 +0.0511047 -0.230668 -0.064182 192 192 192 255 +0.0509869 -0.257974 -0.0650313 192 192 192 255 +0.0230267 -0.255421 -0.0879638 192 192 192 255 +0.0546343 0.391705 -0.0458732 192 192 192 255 +0.0256513 0.419585 -0.0672909 192 192 192 255 +0.064094 0.446229 0.0028893 192 192 192 255 +0.0486812 0.471091 -0.0209381 192 192 192 255 +0.0218191 0.444497 0.0907702 192 192 192 255 +-0.0120342 0.46716 0.0932777 192 192 192 255 +0.0303038 0.499921 0.039252 192 192 192 255 +-0.220271 0.109829 -0.0146313 192 192 192 255 +-0.15727 0.128515 -0.0266596 192 192 192 255 +-0.179746 0.127688 -0.023401 192 192 192 255 +-0.259221 0.114775 0.0066808 192 192 192 255 +-0.229882 0.202748 0.0583652 192 192 192 255 +-0.0962965 -0.134266 0.0636605 192 192 192 255 +-0.0965054 -0.156854 0.0630945 192 192 192 255 +-0.0937361 0.280887 0.075618 192 192 192 255 +-0.0935339 0.310223 0.0764347 192 192 192 255 +-0.0689163 -0.264516 0.081925 192 192 192 255 +-0.0623784 0.418063 0.099736 192 192 192 255 +0.0507793 -0.282568 -0.06567 192 192 192 255 +0.0505494 -0.309875 -0.0663804 192 192 192 255 +0.0225793 -0.307431 -0.0893579 192 192 192 255 +0.0294977 0.498521 0.000502607 192 192 192 255 +0.32907 0.0516091 -0.0531835 192 192 192 255 +0.0706725 -0.422125 0.00781865 192 192 192 255 +-0.219351 0.161734 -0.0160745 192 192 192 255 +-0.280681 0.125972 0.00930716 192 192 192 255 +-0.271928 0.207098 0.0886312 192 192 192 255 +-0.210071 0.176014 0.00322055 192 192 192 255 +-0.234915 0.204131 0.0113363 192 192 192 255 +-0.118766 -0.150024 -0.0161401 192 192 192 255 +-0.0966854 -0.186239 0.0622468 192 192 192 255 +-0.0967627 -0.208751 0.061522 192 192 192 255 +-0.115916 0.317006 -0.00271256 192 192 192 255 +-0.0934364 0.332759 0.0771369 192 192 192 255 +-0.0933098 0.362116 0.0780502 192 192 192 255 +-0.0691141 -0.316306 0.0803384 192 192 192 255 +0.0504136 -0.334515 -0.0671098 192 192 192 255 +0.050264 -0.361771 -0.0679181 192 192 192 255 +0.0222943 -0.359294 -0.0908792 192 192 192 255 +0.029557 0.484709 -0.0298191 192 192 192 255 +-0.0196332 0.519798 -0.00234917 192 192 192 255 +0.338468 0.0689248 -0.0586461 192 192 192 255 +0.358756 0.111013 -0.0150898 192 192 192 255 +0.336383 0.133641 0.0156602 192 192 192 255 +0.0704581 -0.473961 0.00631736 192 192 192 255 +-0.0577517 0.465521 0.0870982 192 192 192 255 +-0.277949 0.171123 -0.0106727 192 192 192 255 +-0.308432 0.15755 0.0132066 192 192 192 255 +-0.251612 0.230775 0.0615151 192 192 192 255 +-0.260781 0.263026 0.0541813 192 192 192 255 +-0.0970002 -0.238127 0.0607456 192 192 192 255 +-0.0971828 -0.26065 0.0601513 192 192 192 255 +-0.0926977 0.385132 0.0781282 192 192 192 255 +-0.0921073 0.414042 0.0784513 192 192 192 255 +-0.0694765 -0.368234 0.0788744 192 192 192 255 +0.306156 0.0741613 -0.0768862 192 192 192 255 +0.304792 0.11464 -0.0737201 192 192 192 255 +0.295283 0.163533 -0.062934 192 192 192 255 +0.0500719 -0.386434 -0.0685787 192 192 192 255 +0.0499214 -0.413669 -0.0693847 192 192 192 255 +0.0219634 -0.411201 -0.0923653 192 192 192 255 +-0.0235697 0.500313 -0.0387756 192 192 192 255 +-0.0718564 0.499568 -0.00206072 192 192 192 255 +0.325886 0.194764 0.0200566 192 192 192 255 +0.0655785 -0.47262 -0.0392671 192 192 192 255 +-0.308264 0.177127 0.0453836 192 192 192 255 +-0.311606 0.178043 0.0141489 192 192 192 255 +-0.334628 0.201443 0.0231656 192 192 192 255 +-0.25406 0.231447 0.0386413 192 192 192 255 +-0.257136 0.232292 0.00991332 192 192 192 255 +-0.0972997 -0.289998 0.0592281 192 192 192 255 +-0.0973906 -0.312544 0.058519 192 192 192 255 +-0.0848775 0.445632 0.0706348 192 192 192 255 +-0.0697513 -0.420089 0.0773488 192 192 192 255 +0.340558 0.16921 -0.076129 192 192 192 255 +0.0497816 -0.438294 -0.070109 192 192 192 255 +0.0495664 -0.465566 -0.0708362 192 192 192 255 +0.0215928 -0.46314 -0.093818 192 192 192 255 +-0.0524255 0.49071 -0.0264858 192 192 192 255 +-0.0738802 0.48698 -0.0205828 192 192 192 255 +0.32551 0.235237 0.0219975 192 192 192 255 +-0.326613 0.21202 0.0072921 192 192 192 255 +-0.119765 -0.305749 -0.0206122 192 192 192 255 +-0.0975944 -0.341861 0.0577014 192 192 192 255 +-0.097751 -0.364441 0.0570722 192 192 192 255 +-0.0700696 -0.471992 0.0758553 192 192 192 255 +0.0494681 -0.490183 -0.0716117 192 192 192 255 +0.0493586 -0.51746 -0.0724703 192 192 192 255 +0.0213962 -0.514922 -0.0954089 192 192 192 255 +0.325501 0.286754 0.0238859 192 192 192 255 +-0.333715 0.262037 -0.00231154 192 192 192 255 +-0.348473 0.243265 0.0290451 192 192 192 255 +-0.354849 0.261493 0.0212315 192 192 192 255 +-0.0979253 -0.393768 0.0562196 192 192 192 255 +-0.0980147 -0.416338 0.0555095 192 192 192 255 +-0.0705172 -0.523995 0.0744588 192 192 192 255 +0.0491885 -0.542029 -0.0731548 192 192 192 255 +0.0489997 -0.569358 -0.0739171 192 192 192 255 +0.0210373 -0.566853 -0.0968691 192 192 192 255 +0.325825 0.338652 0.0253773 192 192 192 255 +-0.333711 0.284495 -0.00292277 192 192 192 255 +-0.35436 0.286682 0.0480478 192 192 192 255 +-0.357123 0.287442 0.0222378 192 192 192 255 +-0.358656 0.322742 0.0546896 192 192 192 255 +-0.120352 -0.409514 -0.0236005 192 192 192 255 +-0.0981766 -0.445585 0.0546426 192 192 192 255 +-0.0983456 -0.468237 0.0540265 192 192 192 255 +-0.0708009 -0.575858 0.0729369 192 192 192 255 +0.0488481 -0.593946 -0.0746252 192 192 192 255 +0.37444 0.300919 -0.0362992 192 192 192 255 +0.372391 0.301482 -0.0554393 192 192 192 255 +0.326332 0.39076 0.0266476 192 192 192 255 +0.0332737 -0.72171 0.0402317 192 192 192 255 +0.0545964 -0.72736 0.000564219 192 192 192 255 +-0.311833 0.335467 -0.00292693 192 192 192 255 +-0.31096 0.365795 -0.0029005 192 192 192 255 +-0.290146 0.450278 0.0720938 192 192 192 255 +-0.0985923 -0.497587 0.0532626 192 192 192 255 +-0.0987819 -0.520134 0.0526759 192 192 192 255 +-0.0709454 -0.627454 0.0713186 192 192 192 255 +0.00774058 -0.681777 -0.0965228 192 192 192 255 +0.372713 0.35338 -0.053948 192 192 192 255 +0.343755 0.465257 0.00495204 192 192 192 255 +0.0546287 -0.695036 -0.0507266 192 192 192 255 +0.0441551 -0.725577 -0.0592642 192 192 192 255 +0.0177015 -0.694274 0.0577258 192 192 192 255 +-0.31095 0.388007 -0.00210669 192 192 192 255 +-0.330267 0.467998 0.0253131 192 192 192 255 +-0.0989432 -0.54952 0.0518066 192 192 192 255 +-0.0990686 -0.572032 0.0511397 192 192 192 255 +-0.0675179 -0.672609 0.0672759 192 192 192 255 +0.041462 -0.705473 -0.0695288 192 192 192 255 +0.0153233 -0.7246 -0.0869913 192 192 192 255 +0.338981 0.467047 -0.045795 192 192 192 255 +0.37263 0.405124 -0.0524174 192 192 192 255 +0.369779 0.437025 0.00106389 192 192 192 255 +-0.121472 -0.565276 -0.0280605 192 192 192 255 +-0.0992524 -0.601401 0.0502989 192 192 192 255 +-0.0993953 -0.62393 0.0496532 192 192 192 255 +-0.0475626 -0.707695 0.0643171 192 192 192 255 +-0.02422 -0.722598 -0.0980084 192 192 192 255 +0.367265 0.437715 -0.0224145 192 192 192 255 +0.364255 0.438542 -0.0505381 192 192 192 255 +-0.0979975 -0.651485 0.0469148 192 192 192 255 +-0.0964547 -0.67573 0.0441171 192 192 192 255 +-0.112642 -0.668433 0.0134785 192 192 192 255 +-0.0677859 -0.722004 0.0555947 192 192 192 255 +-0.084072 -0.668365 -0.0870377 192 192 192 255 +-0.117454 -0.66711 -0.0314849 192 192 192 255 +-0.0941682 -0.698621 0.0404469 192 192 192 255 +-0.0969035 -0.727167 0.0266083 192 192 192 255 +-0.106885 -0.706847 0.00852706 192 192 192 255 +-0.0520515 -0.724025 -0.0923986 192 192 192 255 +-0.0641338 -0.703142 -0.090491 192 192 192 255 +-0.104987 -0.72619 -0.00564888 192 192 192 255 +-0.0258578 -0.726367 -0.0166043 192 192 192 255 +3 0 1 2 +3 3 4 5 +3 6 0 7 +3 4 8 9 +3 10 3 11 +3 12 13 14 +3 15 16 17 +3 8 18 15 +3 19 10 20 +3 21 22 23 +3 24 25 26 +3 26 27 24 +3 28 29 30 +3 18 31 16 +3 32 19 33 +3 34 35 36 +3 37 38 28 +3 31 39 40 +3 41 32 42 +3 43 36 44 +3 45 46 35 +3 47 48 49 +3 50 51 52 +3 53 54 52 +3 55 56 57 +3 58 59 60 +3 61 62 60 +3 63 64 65 +3 66 63 67 +3 68 69 37 +3 39 70 71 +3 72 41 73 +3 74 75 76 +3 76 34 43 +3 77 44 78 +3 79 80 46 +3 49 48 64 +3 65 81 82 +3 83 84 85 +3 86 76 75 +3 77 87 74 +3 88 89 90 +3 91 45 34 +3 34 92 91 +3 70 93 94 +3 95 72 96 +3 97 78 98 +3 99 100 80 +3 101 59 102 +3 103 104 105 +3 92 76 86 +3 106 107 108 +3 109 68 110 +3 97 111 87 +3 112 113 89 +3 45 91 114 +3 93 115 116 +3 117 98 118 +3 119 120 100 +3 121 122 123 +3 124 123 125 +3 126 127 123 +3 128 129 130 +3 131 101 132 +3 122 121 133 +3 134 135 133 +3 136 102 134 +3 134 137 138 +3 139 140 106 +3 117 141 111 +3 79 114 142 +3 143 144 145 +3 115 146 147 +3 148 118 149 +3 150 151 120 +3 152 153 126 +3 154 155 156 +3 132 157 158 +3 159 160 161 +3 162 163 164 +3 165 166 167 +3 148 168 141 +3 169 170 171 +3 99 142 172 +3 146 173 174 +3 175 149 176 +3 177 178 151 +3 179 158 180 +3 181 182 183 +3 162 184 165 +3 185 186 187 +3 175 188 168 +3 189 190 170 +3 119 172 191 +3 192 193 194 +3 173 195 196 +3 197 176 198 +3 199 200 178 +3 201 180 202 +3 203 204 182 +3 205 203 181 +3 206 207 208 +3 209 210 211 +3 212 213 214 +3 215 185 216 +3 197 217 188 +3 218 194 203 +3 195 219 220 +3 221 198 222 +3 207 206 223 +3 224 202 225 +3 208 226 212 +3 207 227 226 +3 213 212 226 +3 228 214 213 +3 229 230 231 +3 232 231 233 +3 234 235 236 +3 237 238 239 +3 240 215 241 +3 242 243 244 +3 221 245 217 +3 246 247 248 +3 219 249 250 +3 251 222 252 +3 253 254 227 +3 224 255 256 +3 257 225 258 +3 259 260 229 +3 233 231 230 +3 261 262 263 +3 264 263 265 +3 266 234 267 +3 268 242 238 +3 269 270 271 +3 272 215 240 +3 243 273 274 +3 251 275 245 +3 249 276 277 +3 278 252 279 +3 256 255 260 +3 257 280 255 +3 281 258 282 +3 265 263 262 +3 283 284 285 +3 286 285 287 +3 288 266 289 +3 290 291 292 +3 293 294 295 +3 278 296 275 +3 297 298 299 +3 276 300 292 +3 301 279 302 +3 281 303 280 +3 304 305 306 +3 304 307 308 +3 287 285 284 +3 309 310 311 +3 312 282 313 +3 314 315 290 +3 291 290 315 +3 316 317 318 +3 319 320 321 +3 322 323 324 +3 325 324 323 +3 322 326 327 +3 301 328 296 +3 329 330 298 +3 300 331 332 +3 333 302 334 +3 335 336 303 +3 337 338 309 +3 320 319 325 +3 339 340 341 +3 342 343 344 +3 323 322 345 +3 333 346 328 +3 347 334 348 +3 348 307 304 +3 347 349 346 +3 350 351 352 +3 353 348 354 +3 353 355 349 +3 356 357 358 +3 2 5 7 +3 11 5 2 +3 2 7 0 +3 7 9 12 +3 5 9 7 +3 359 11 2 +3 20 11 359 +3 5 11 3 +3 1 0 360 +3 360 0 361 +3 362 360 361 +3 360 363 1 +3 363 360 364 +3 360 362 364 +3 7 12 6 +3 359 2 365 +3 365 2 1 +3 15 13 12 +3 9 15 12 +3 366 20 359 +3 33 20 366 +3 367 4 3 +3 368 367 3 +3 9 5 4 +3 11 20 10 +3 0 6 369 +3 369 6 370 +3 371 369 370 +3 369 361 0 +3 361 369 362 +3 369 371 362 +3 365 1 372 +3 372 1 363 +3 364 372 363 +3 372 373 365 +3 373 372 374 +3 372 364 374 +3 366 359 21 +3 21 359 365 +3 25 24 14 +3 14 24 12 +3 17 13 15 +3 375 17 16 +3 23 33 366 +3 42 33 23 +3 376 8 4 +3 367 376 4 +3 368 3 10 +3 377 368 10 +3 15 9 8 +3 20 33 19 +3 364 362 36 +3 35 364 36 +3 378 379 6 +3 378 380 379 +3 381 379 380 +3 379 370 6 +3 370 379 371 +3 379 381 371 +3 21 365 382 +3 382 365 373 +3 374 382 373 +3 382 383 21 +3 383 382 384 +3 382 374 384 +3 385 12 24 +3 6 12 385 +3 23 366 21 +3 386 62 26 +3 26 62 27 +3 67 25 387 +3 375 67 387 +3 14 387 25 +3 17 387 14 +3 17 14 13 +3 17 375 387 +3 375 40 388 +3 389 388 40 +3 16 40 375 +3 390 42 23 +3 73 42 390 +3 368 391 367 +3 391 30 367 +3 30 391 28 +3 391 368 392 +3 28 391 392 +3 393 18 8 +3 376 393 8 +3 377 10 19 +3 394 377 19 +3 16 15 18 +3 33 42 32 +3 36 43 34 +3 362 371 44 +3 36 362 44 +3 374 364 35 +3 46 374 35 +3 395 378 385 +3 378 6 385 +3 378 54 396 +3 54 53 396 +3 397 396 53 +3 380 378 396 +3 380 396 381 +3 396 397 381 +3 22 21 398 +3 398 21 383 +3 384 398 383 +3 398 399 22 +3 399 398 400 +3 398 384 400 +3 24 27 401 +3 402 385 401 +3 401 385 24 +3 390 23 55 +3 55 23 22 +3 82 403 404 +3 386 82 404 +3 60 404 403 +3 62 404 60 +3 62 386 404 +3 386 26 405 +3 26 67 405 +3 25 67 26 +3 61 27 62 +3 388 67 375 +3 66 388 389 +3 66 389 406 +3 66 406 52 +3 389 71 407 +3 40 71 389 +3 57 73 390 +3 96 73 57 +3 28 392 37 +3 29 28 38 +3 29 38 408 +3 69 38 37 +3 408 38 69 +3 367 409 376 +3 409 410 376 +3 410 409 90 +3 409 367 30 +3 29 409 30 +3 29 90 409 +3 377 392 368 +3 392 377 411 +3 411 412 392 +3 412 413 392 +3 414 31 18 +3 393 414 18 +3 394 19 32 +3 415 394 32 +3 40 16 31 +3 42 73 41 +3 44 77 43 +3 35 34 45 +3 371 381 78 +3 44 371 78 +3 384 374 46 +3 80 384 46 +3 402 47 416 +3 49 416 47 +3 395 416 49 +3 402 416 385 +3 395 385 416 +3 395 63 54 +3 378 395 54 +3 52 406 50 +3 52 51 53 +3 417 51 50 +3 53 51 397 +3 51 417 397 +3 55 22 418 +3 418 22 399 +3 400 418 399 +3 418 419 55 +3 419 418 420 +3 418 400 420 +3 401 27 61 +3 401 61 402 +3 57 390 55 +3 403 82 421 +3 405 82 386 +3 60 403 58 +3 60 59 61 +3 65 405 67 +3 65 67 63 +3 67 388 66 +3 52 63 66 +3 389 407 406 +3 406 407 422 +3 407 94 105 +3 71 94 407 +3 423 96 57 +3 424 96 423 +3 408 75 29 +3 75 408 425 +3 69 426 408 +3 140 426 69 +3 392 413 37 +3 37 413 68 +3 29 427 90 +3 427 428 90 +3 376 429 393 +3 429 430 393 +3 430 429 89 +3 429 376 410 +3 410 90 429 +3 429 90 89 +3 412 431 413 +3 394 432 377 +3 432 411 377 +3 411 432 412 +3 432 394 433 +3 433 434 432 +3 432 434 412 +3 435 39 31 +3 414 435 31 +3 415 32 41 +3 436 415 41 +3 71 40 39 +3 73 96 72 +3 76 43 74 +3 78 97 77 +3 46 45 79 +3 381 397 98 +3 78 381 98 +3 400 384 80 +3 100 400 80 +3 437 81 438 +3 81 48 438 +3 402 437 438 +3 47 402 438 +3 47 438 48 +3 64 63 49 +3 63 395 49 +3 63 52 54 +3 406 422 439 +3 439 422 440 +3 441 439 440 +3 439 50 406 +3 50 439 417 +3 439 441 417 +3 56 55 442 +3 442 55 419 +3 420 442 419 +3 442 443 56 +3 443 442 444 +3 442 420 444 +3 61 59 131 +3 402 61 131 +3 423 57 445 +3 445 57 56 +3 122 421 82 +3 81 122 82 +3 446 102 58 +3 421 446 58 +3 403 421 58 +3 59 58 102 +3 82 405 65 +3 64 81 65 +3 407 105 422 +3 422 105 104 +3 105 116 447 +3 94 116 105 +3 83 424 423 +3 85 424 83 +3 75 425 86 +3 448 86 425 +3 408 426 449 +3 408 449 425 +3 449 450 425 +3 426 140 449 +3 140 451 449 +3 451 450 449 +3 427 29 75 +3 140 69 68 +3 107 68 452 +3 107 140 68 +3 431 110 413 +3 110 431 453 +3 110 68 413 +3 74 87 428 +3 74 43 77 +3 428 427 74 +3 75 74 427 +3 90 428 88 +3 393 454 414 +3 454 455 414 +3 455 454 113 +3 454 393 430 +3 430 89 454 +3 454 89 113 +3 34 76 92 +3 91 92 431 +3 434 456 412 +3 412 456 431 +3 415 457 394 +3 457 433 394 +3 433 457 434 +3 457 415 458 +3 458 144 457 +3 457 144 434 +3 459 70 39 +3 435 459 39 +3 436 41 72 +3 460 436 72 +3 94 71 70 +3 96 424 95 +3 98 117 97 +3 80 79 99 +3 397 417 118 +3 98 397 118 +3 420 400 100 +3 120 420 100 +3 125 122 81 +3 81 437 125 +3 81 64 48 +3 131 124 402 +3 437 402 124 +3 422 104 461 +3 461 104 462 +3 463 461 462 +3 461 440 422 +3 440 461 441 +3 461 463 441 +3 445 56 464 +3 464 56 443 +3 444 464 443 +3 464 128 445 +3 128 464 465 +3 464 444 465 +3 131 59 101 +3 83 423 466 +3 466 423 445 +3 130 466 445 +3 466 84 83 +3 84 466 467 +3 466 130 467 +3 134 102 446 +3 135 134 446 +3 135 446 421 +3 102 136 101 +3 157 101 136 +3 105 447 103 +3 447 147 161 +3 116 147 447 +3 424 85 468 +3 469 468 85 +3 470 85 84 +3 425 450 448 +3 450 451 471 +3 450 471 448 +3 92 472 431 +3 86 472 92 +3 448 472 86 +3 472 453 431 +3 473 453 472 +3 473 472 448 +3 451 140 139 +3 139 474 451 +3 140 107 106 +3 108 107 452 +3 108 166 106 +3 68 109 452 +3 475 452 109 +3 110 453 109 +3 87 111 88 +3 87 77 97 +3 87 88 428 +3 89 88 112 +3 414 476 435 +3 476 477 435 +3 477 476 171 +3 476 414 455 +3 455 113 476 +3 476 113 171 +3 114 91 431 +3 114 79 45 +3 114 431 456 +3 144 143 434 +3 434 143 456 +3 436 478 415 +3 478 458 415 +3 458 478 144 +3 478 436 479 +3 479 145 478 +3 478 145 144 +3 480 93 70 +3 459 480 70 +3 460 72 95 +3 481 460 95 +3 116 94 93 +3 424 468 95 +3 468 469 95 +3 118 148 117 +3 100 99 119 +3 417 441 149 +3 118 417 149 +3 444 420 120 +3 151 444 120 +3 123 127 121 +3 122 125 123 +3 125 437 124 +3 123 131 126 +3 124 131 123 +3 104 103 482 +3 482 103 483 +3 484 482 483 +3 482 462 104 +3 462 482 463 +3 482 484 463 +3 130 445 128 +3 465 129 128 +3 129 467 130 +3 155 467 129 +3 465 155 129 +3 101 157 132 +3 132 152 131 +3 485 470 84 +3 485 84 467 +3 135 421 133 +3 133 421 122 +3 133 486 134 +3 133 121 486 +3 134 138 136 +3 136 158 157 +3 447 161 103 +3 103 161 160 +3 161 174 487 +3 147 174 161 +3 469 85 470 +3 183 469 470 +3 451 474 471 +3 453 473 471 +3 448 471 473 +3 488 453 471 +3 106 164 139 +3 139 164 474 +3 489 474 164 +3 166 184 106 +3 452 475 108 +3 475 166 108 +3 475 490 167 +3 475 167 166 +3 453 491 109 +3 492 475 109 +3 492 109 491 +3 111 141 112 +3 111 97 117 +3 111 112 88 +3 113 112 171 +3 171 112 493 +3 435 494 459 +3 494 495 459 +3 495 494 170 +3 494 435 477 +3 477 171 494 +3 494 171 170 +3 142 114 456 +3 142 99 79 +3 142 456 143 +3 145 496 143 +3 460 497 436 +3 497 479 436 +3 479 497 145 +3 497 460 498 +3 498 193 497 +3 497 193 145 +3 499 115 93 +3 480 499 93 +3 481 95 469 +3 147 116 115 +3 149 175 148 +3 120 119 150 +3 441 463 176 +3 149 441 176 +3 465 444 151 +3 178 465 151 +3 121 127 486 +3 126 131 152 +3 103 160 500 +3 500 160 501 +3 502 500 501 +3 500 483 103 +3 483 500 484 +3 500 502 484 +3 465 156 155 +3 156 200 154 +3 503 485 467 +3 503 467 155 +3 158 179 132 +3 132 179 152 +3 485 183 470 +3 485 504 183 +3 137 134 486 +3 137 486 505 +3 506 138 137 +3 136 138 507 +3 158 507 210 +3 158 136 507 +3 161 487 159 +3 487 196 508 +3 174 196 487 +3 509 469 183 +3 182 509 183 +3 471 474 488 +3 474 489 510 +3 474 510 488 +3 453 488 491 +3 488 492 491 +3 164 106 184 +3 164 184 162 +3 164 163 489 +3 162 511 163 +3 167 490 187 +3 167 187 165 +3 166 165 184 +3 186 165 187 +3 512 490 475 +3 512 513 216 +3 512 216 490 +3 141 168 493 +3 141 117 148 +3 141 493 112 +3 171 493 169 +3 459 514 480 +3 514 515 480 +3 515 514 190 +3 514 459 495 +3 495 170 514 +3 514 170 190 +3 172 142 143 +3 172 119 99 +3 172 143 496 +3 193 192 145 +3 145 192 496 +3 481 516 460 +3 516 498 460 +3 498 516 193 +3 516 481 517 +3 517 194 516 +3 516 194 193 +3 518 146 115 +3 499 518 115 +3 481 469 509 +3 174 147 146 +3 176 197 175 +3 151 150 177 +3 463 484 198 +3 176 463 198 +3 465 178 156 +3 178 200 156 +3 505 486 519 +3 505 519 223 +3 519 486 127 +3 520 223 519 +3 126 153 520 +3 126 520 519 +3 126 519 127 +3 152 179 153 +3 153 179 521 +3 160 159 522 +3 522 159 523 +3 524 522 523 +3 522 501 160 +3 501 522 502 +3 522 524 502 +3 503 154 485 +3 155 154 503 +3 154 504 485 +3 525 504 154 +3 200 525 154 +3 180 201 179 +3 183 504 181 +3 526 181 504 +3 206 506 137 +3 206 137 505 +3 211 210 507 +3 506 211 507 +3 506 507 138 +3 209 214 527 +3 210 209 527 +3 158 210 527 +3 180 158 527 +3 487 508 159 +3 159 508 528 +3 508 220 236 +3 196 220 508 +3 509 182 204 +3 489 163 510 +3 163 511 510 +3 488 510 492 +3 510 239 492 +3 165 529 162 +3 162 529 530 +3 162 530 511 +3 165 186 529 +3 186 531 529 +3 531 530 529 +3 490 216 187 +3 187 216 185 +3 512 475 532 +3 532 475 492 +3 533 532 492 +3 532 513 512 +3 513 532 238 +3 532 533 238 +3 513 241 216 +3 168 188 169 +3 168 148 175 +3 168 169 493 +3 170 169 189 +3 480 534 499 +3 534 535 499 +3 535 534 248 +3 534 480 515 +3 515 190 534 +3 534 190 248 +3 191 172 496 +3 191 150 119 +3 191 496 192 +3 194 218 192 +3 536 481 509 +3 536 517 481 +3 517 536 194 +3 204 536 509 +3 536 204 194 +3 537 173 146 +3 518 537 146 +3 196 174 173 +3 198 221 197 +3 178 177 199 +3 484 502 222 +3 198 484 222 +3 505 223 206 +3 538 223 520 +3 521 538 520 +3 153 521 520 +3 179 201 521 +3 159 528 539 +3 539 528 540 +3 541 539 540 +3 539 523 159 +3 523 539 524 +3 539 541 524 +3 504 525 542 +3 525 200 542 +3 542 200 199 +3 504 542 526 +3 543 526 542 +3 543 542 199 +3 202 224 201 +3 182 181 203 +3 181 526 205 +3 506 208 211 +3 208 506 206 +3 211 212 209 +3 214 209 212 +3 228 231 544 +3 214 228 544 +3 214 544 527 +3 180 527 544 +3 232 544 231 +3 202 544 232 +3 202 180 544 +3 508 236 528 +3 528 236 235 +3 236 250 267 +3 220 250 236 +3 511 530 510 +3 510 530 239 +3 530 531 545 +3 530 545 239 +3 533 492 239 +3 239 238 533 +3 186 185 270 +3 216 241 215 +3 241 513 242 +3 513 238 242 +3 188 217 189 +3 188 175 197 +3 188 189 169 +3 190 189 248 +3 248 189 546 +3 499 547 518 +3 547 548 518 +3 548 547 247 +3 547 499 535 +3 535 248 547 +3 547 248 247 +3 177 191 192 +3 191 177 150 +3 177 192 218 +3 203 194 204 +3 203 205 218 +3 549 195 173 +3 537 549 173 +3 220 196 195 +3 222 251 221 +3 502 524 252 +3 222 502 252 +3 223 538 207 +3 253 538 521 +3 201 253 521 +3 528 235 550 +3 550 235 551 +3 552 550 551 +3 550 540 528 +3 540 550 541 +3 550 552 541 +3 205 526 543 +3 205 543 199 +3 225 257 224 +3 212 211 208 +3 226 208 207 +3 226 259 213 +3 226 227 259 +3 213 229 228 +3 231 228 229 +3 233 263 553 +3 233 553 232 +3 202 232 553 +3 264 553 263 +3 225 553 264 +3 225 202 553 +3 236 267 234 +3 267 277 289 +3 250 277 267 +3 239 545 237 +3 545 554 237 +3 270 555 186 +3 555 531 186 +3 555 270 269 +3 269 556 555 +3 185 215 271 +3 185 271 270 +3 215 272 271 +3 241 244 240 +3 240 244 295 +3 244 241 242 +3 217 245 546 +3 217 197 221 +3 217 546 189 +3 248 546 246 +3 518 557 537 +3 557 558 537 +3 558 557 299 +3 557 518 548 +3 548 247 557 +3 557 247 299 +3 177 218 199 +3 218 205 199 +3 559 219 195 +3 549 559 195 +3 250 220 219 +3 252 278 251 +3 524 541 279 +3 252 524 279 +3 227 207 538 +3 227 538 253 +3 227 254 259 +3 256 201 224 +3 253 201 256 +3 235 234 560 +3 560 234 561 +3 562 560 561 +3 560 551 235 +3 551 560 552 +3 560 562 552 +3 258 281 257 +3 229 213 259 +3 229 260 230 +3 230 261 233 +3 263 233 261 +3 265 285 563 +3 265 563 264 +3 225 264 563 +3 286 563 285 +3 258 563 286 +3 258 225 563 +3 267 289 266 +3 289 292 291 +3 289 277 292 +3 531 555 545 +3 545 555 554 +3 555 556 554 +3 238 237 268 +3 564 316 268 +3 564 268 237 +3 564 237 554 +3 271 565 269 +3 269 565 566 +3 269 566 556 +3 565 271 567 +3 567 271 272 +3 567 317 565 +3 565 317 566 +3 240 295 294 +3 240 294 272 +3 294 293 272 +3 295 244 274 +3 295 274 327 +3 274 244 243 +3 245 275 246 +3 245 221 251 +3 245 246 546 +3 247 246 299 +3 299 246 568 +3 537 569 549 +3 569 570 549 +3 570 569 298 +3 569 537 558 +3 558 299 569 +3 569 299 298 +3 571 249 219 +3 559 571 219 +3 277 250 249 +3 279 301 278 +3 541 552 302 +3 279 541 302 +3 260 259 254 +3 260 254 256 +3 256 254 253 +3 255 224 257 +3 234 266 572 +3 572 266 308 +3 307 572 308 +3 572 561 234 +3 561 572 562 +3 572 307 562 +3 282 335 281 +3 261 230 573 +3 573 230 260 +3 574 573 260 +3 261 573 262 +3 262 283 265 +3 285 265 283 +3 287 311 575 +3 287 575 286 +3 258 286 575 +3 313 575 311 +3 282 575 313 +3 282 258 575 +3 289 291 288 +3 290 576 577 +3 292 576 290 +3 556 566 564 +3 564 566 316 +3 556 564 554 +3 566 317 316 +3 243 242 578 +3 242 268 578 +3 316 578 268 +3 579 243 578 +3 321 320 579 +3 321 579 578 +3 321 578 316 +3 567 318 317 +3 567 272 324 +3 324 272 293 +3 324 319 567 +3 567 319 318 +3 295 327 326 +3 295 326 293 +3 326 322 293 +3 274 580 327 +3 580 345 327 +3 275 296 568 +3 275 251 278 +3 275 568 246 +3 299 568 297 +3 549 581 559 +3 581 582 559 +3 582 581 330 +3 581 549 570 +3 570 298 581 +3 581 298 330 +3 583 276 249 +3 571 583 249 +3 292 277 276 +3 302 333 301 +3 552 562 334 +3 302 552 334 +3 574 260 255 +3 255 280 574 +3 280 257 281 +3 266 288 305 +3 305 288 306 +3 306 584 304 +3 305 308 266 +3 308 305 304 +3 335 282 312 +3 283 262 337 +3 337 262 573 +3 585 337 573 +3 585 573 574 +3 283 337 284 +3 284 309 287 +3 311 287 309 +3 311 586 313 +3 313 586 312 +3 290 577 314 +3 587 315 314 +3 587 314 588 +3 315 288 291 +3 315 587 288 +3 332 576 589 +3 589 576 292 +3 318 321 316 +3 321 318 319 +3 273 243 590 +3 243 579 590 +3 320 590 579 +3 342 273 590 +3 341 340 342 +3 341 342 590 +3 341 590 320 +3 324 325 319 +3 324 293 322 +3 323 339 325 +3 327 345 322 +3 274 344 580 +3 274 273 344 +3 344 345 580 +3 345 344 591 +3 296 328 297 +3 296 278 301 +3 296 297 568 +3 298 297 329 +3 559 592 571 +3 592 593 571 +3 593 592 352 +3 592 559 582 +3 582 330 592 +3 592 330 352 +3 300 276 594 +3 594 276 583 +3 332 589 300 +3 589 292 300 +3 334 347 333 +3 562 307 348 +3 334 562 348 +3 585 574 280 +3 280 303 585 +3 303 281 335 +3 587 588 595 +3 596 595 588 +3 595 306 587 +3 587 306 288 +3 584 306 595 +3 584 595 596 +3 312 586 597 +3 335 312 597 +3 309 284 337 +3 598 338 337 +3 598 337 585 +3 309 338 310 +3 599 311 310 +3 599 586 311 +3 325 341 320 +3 341 325 339 +3 344 273 342 +3 340 343 342 +3 343 591 344 +3 345 591 323 +3 323 591 339 +3 328 346 329 +3 328 301 333 +3 328 329 297 +3 330 329 352 +3 352 329 600 +3 571 601 583 +3 601 602 583 +3 602 601 351 +3 601 571 593 +3 593 352 601 +3 601 352 351 +3 331 300 603 +3 300 594 603 +3 348 353 347 +3 304 584 354 +3 304 354 348 +3 598 585 303 +3 303 336 598 +3 597 336 335 +3 584 596 604 +3 599 310 605 +3 605 310 338 +3 606 605 338 +3 606 338 598 +3 605 586 599 +3 586 605 597 +3 605 606 597 +3 339 591 343 +3 339 343 340 +3 346 349 600 +3 346 333 347 +3 346 600 329 +3 352 600 350 +3 594 583 607 +3 594 607 608 +3 608 607 609 +3 607 583 602 +3 602 351 607 +3 607 351 609 +3 603 610 331 +3 610 603 594 +3 354 611 353 +3 604 354 584 +3 606 598 336 +3 336 597 606 +3 349 355 350 +3 349 347 353 +3 349 350 600 +3 351 350 609 +3 609 350 612 +3 610 594 613 +3 610 613 614 +3 614 613 615 +3 608 613 594 +3 608 609 613 +3 613 609 615 +3 616 617 604 +3 604 617 354 +3 617 611 354 +3 612 355 611 +3 355 353 611 +3 355 612 350 +3 615 618 614 +3 618 615 358 +3 618 358 357 +3 609 612 615 +3 615 612 358 +3 617 616 356 +3 611 617 356 +3 358 611 356 +3 358 612 611 +3 314 619 588 +3 596 588 619 +3 604 596 619 +3 616 604 619 +3 356 616 619 +3 357 356 619 +3 618 357 619 +3 614 618 619 +3 610 614 619 +3 331 610 619 +3 332 331 619 +3 576 332 619 +3 619 314 577 +3 577 576 619 diff --git a/Surface_mesh_segmentation/test/Surface_mesh_segmentation/mesh_segmentation_test.cpp b/Surface_mesh_segmentation/test/Surface_mesh_segmentation/mesh_segmentation_test.cpp new file mode 100644 index 00000000000..14032e2b1d8 --- /dev/null +++ b/Surface_mesh_segmentation/test/Surface_mesh_segmentation/mesh_segmentation_test.cpp @@ -0,0 +1,51 @@ +#include + +#include +#include +#include + +#include +#include +#include + +#include "Utils.h" + +typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel; +typedef CGAL::Polyhedron_3 Polyhedron; + +/** + * Note that it always return EXIT_SUCCESS if .off file is read successfully. + */ +int main(void) +{ + Polyhedron mesh; + if( !read_to_polyhedron("./data/cactus.off", mesh) ) { return 1; } + + typedef std::map Facet_double_map; + Facet_double_map internal_map; + boost::associative_property_map sdf_property_map(internal_map); + + std::pair min_max_sdf = CGAL::sdf_values_computation(mesh, sdf_property_map); + std::cout << "minimum sdf: " << min_max_sdf.first << " maximum sdf: " << min_max_sdf.second << std::endl; + + + typedef std::map Facet_int_map; + Facet_int_map internal_segment_map; + boost::associative_property_map segment_property_map(internal_segment_map); + + int nb_segments = CGAL::surface_mesh_segmentation_from_sdf_values( + mesh, sdf_property_map, segment_property_map); + + if(nb_segments != 3) + { + std::cout << "Number of segments should be 3 for cactus model (since it is pretty easy model to segment)" << std::endl; + } + + int nb_segments_2 = CGAL::surface_mesh_segmentation(mesh, segment_property_map); + + if(nb_segments_2 != nb_segments) + { + std::cout << "Inconsistency between 'surface_mesh_segmentation' and 'surface_mesh_segmentation_from_sdf_values'" + << std::endl; + } +} \ No newline at end of file