// computes the smallest enclosing annulus of two point // sets on nested squares in R^2, using double // as input type and some internal EXACT floating point type #include #include #include #include #include #include #ifdef CGAL_USE_GMP #include typedef CGAL::Gmpzf ET; #else #include typedef CGAL::MP_Float ET; #endif // use an EXACT kernel... typedef CGAL::Homogeneous K; typedef K::Point_2 Point; // ...and the traits class based on the exact kernel typedef CGAL::Min_sphere_annulus_d_traits_2 Traits; typedef CGAL::Min_annulus_d Min_annulus; int main() { // points on the squares [-1,1]^2 and [-2,2]^2 std::array P = { Point(-1,-1), Point(-1,1), Point(1,-1), Point(1,1), Point(-2,-2), Point(-2,2), Point(2,-2), Point(2,2)}; Min_annulus ma(P.begin(), P.end()); assert (ma.is_valid()); // get center of annulus Min_annulus::Coordinate_iterator coord_it; std::cout << "center:"; // homogeneous point, (0,0,1) for (coord_it = ma.center_coordinates_begin(); coord_it != ma.center_coordinates_end(); ++coord_it) std::cout << " " << *coord_it; std::cout << std::endl; // get inner squared radius, 1^2+1^2 = 2 std::cout << "Inner squared radius: " << CGAL::to_double(ma.squared_inner_radius_numerator()) / CGAL::to_double(ma.squared_radii_denominator()) << std::endl; // get outer squared radius, 2^2+2^2 = 8 std::cout << "Outer squared radius: " << CGAL::to_double(ma.squared_outer_radius_numerator()) / CGAL::to_double(ma.squared_radii_denominator()) << std::endl; return 0; }