// Copyright (c) 2002 Max Planck Institut fuer Informatik (Germany). // All rights reserved. // // This file is part of CGAL (www.cgal.org); you may redistribute it under // the terms of the Q Public License version 1.0. // See the file LICENSE.QPL distributed with CGAL. // // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. // // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. // // $Source: /CVSROOT/CGAL/Packages/Convex_hull_3/demo/Convex_hull_3/quickhull_3_demo.C,v $ // $Revision: 1.6.4.1 $ $Date: 2004/12/19 14:58:03 $ // $Name: $ // // Author(s) : Susan Hert #include #include #include #include #include #include #include #include #ifdef CGAL_USE_GEOMVIEW #ifdef CGAL_USE_LEDA #include typedef leda_integer RT; #else #ifdef CGAL_USE_GMP #include typedef CGAL::Gmpz RT; #else // NOTE: the choice of double here for a number type may cause problems // for degenerate point sets #include typedef double RT; #endif #endif #include // NOTE: the choice of double here for a number type may cause problems // for degenerate point sets typedef CGAL::Homogeneous K; typedef CGAL::Convex_hull_traits_3 Traits; typedef Traits::Polyhedron_3 Polyhedron_3; // define point creator typedef K::Point_3 Point_3; typedef CGAL::Creator_uniform_3 PointCreator; typedef CGAL::Random_points_in_sphere_3 Generator; void draw_points_and_hull(const std::vector& points, const CGAL::Object& object) { std::vector::const_iterator p_it; CGAL::Geomview_stream geomview; geomview << CGAL::RED; for (p_it = points.begin(); p_it != points.end(); p_it++) { geomview << *p_it; } K::Segment_3 segment; K::Triangle_3 triangle; Point_3 point; Polyhedron_3 polyhedron; geomview << CGAL::BLUE; if ( CGAL::assign(point, object) ) geomview << point; else if ( CGAL::assign(segment, object) ) geomview << segment; else if ( CGAL::assign(triangle, object) ) geomview << triangle; else if ( CGAL::assign(polyhedron, object) ) geomview << polyhedron; std::cout << "Press any key to end the program: "; char wait; std::cin >> wait; } int main(int argc, char* argv[]) { if (argc != 2) { std::cerr << "Usage: " << argv[0] << " #points " << std::endl; exit(0); } int num = atoi(argv[1]); if (num < 0) { std::cerr << "Usage: " << argv[0] << " #points " << std::endl; std::cerr << " #points must be >= 0" << std::endl; exit(0); } std::vector points; Generator gen(100.0); // generate num points and copy them to a vector CGAL::copy_n( gen, num, std::back_inserter(points) ); // define object to hold convex hull CGAL::Object ch_object; // compute convex hull CGAL::convex_hull_3(points.begin(), points.end(), ch_object); draw_points_and_hull(points, ch_object); return 0; } #else int main() { std::cerr << "This demo requires geomview, which is not present on this platform\n"; return 0; } #endif