diff --git a/Packages/Generator/doc_tex/Generator/Segment_generator_prog1.C b/Packages/Generator/doc_tex/Generator/Segment_generator_prog1.C new file mode 100644 index 00000000000..190cf64fe3f --- /dev/null +++ b/Packages/Generator/doc_tex/Generator/Segment_generator_prog1.C @@ -0,0 +1,54 @@ +/* Segment_generator_prog1.C */ +/* ------------------------------- */ +/* CGAL example program for the generic segment generator. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include /* only for visualization used */ + +typedef CGAL_Cartesian R; +typedef CGAL_Point_2 Point; +typedef CGAL_Segment_2 Segment; + +int main() +{ + /* Create test segment set. Prepare a vector for 200 segments. */ + vector segs; + segs.reserve(200); + + /* Prepare point generator for the horizontal segment, length 200. */ + typedef CGAL_Random_points_on_segment_2 P1; + P1 p1( Point(-100,0), Point(100,0)); + + /* Prepare point generator for random points on circle, radius 250. */ + typedef CGAL_Random_points_on_circle_2 P2; + P2 p2( 250); + + /* Create 200 segments. */ + CGAL_Segment_generator g( p1, p2); + CGAL_ncopy( g, 200, back_inserter( segs)); + + /* Visualize segments. Can be omitted, see example programs */ + /* in the CGAL source code distribution. */ + CGAL_Window_stream W(512, 512); + W.init(-256.0, 255.0, -256.0); + W << CGAL_BLACK; + for( vector::iterator i = segs.begin(); i != segs.end(); i++) + W << *i; + + /* Wait for program termination. */ + char c; + cout << " Type any character to continue: " << endl; + cin >> c; + cout << " done" << endl; + + return 0; +} diff --git a/Packages/Generator/doc_tex/Generator/Segment_generator_prog2.C b/Packages/Generator/doc_tex/Generator/Segment_generator_prog2.C new file mode 100644 index 00000000000..25d51401689 --- /dev/null +++ b/Packages/Generator/doc_tex/Generator/Segment_generator_prog2.C @@ -0,0 +1,67 @@ +/* Segment_generator_prog2.C */ +/* ------------------------------- */ +/* CGAL example program for the generic segment generator */ +/* using precomputed point locations. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include /* only for visualization used */ + +typedef CGAL_Cartesian R; +typedef CGAL_Point_2 Point; +typedef CGAL_Segment_2 Segment; + +int main() +{ + /* Prepare two point vectors for the precomputed points. */ + vector p1, p2; + p1.reserve(100); + p2.reserve(100); + + /* Create points for a horizontal like fan. */ + CGAL_points_on_segment_2( Point(-250, -50), Point(-250, 50), + 50, back_inserter( p1)); + CGAL_points_on_segment_2( Point( 250,-250), Point( 250,250), + 50, back_inserter( p2)); + + /* Create points for a vertical like fan. */ + CGAL_points_on_segment_2( Point( -50,-250), Point( 50,-250), + 50, back_inserter( p1)); + CGAL_points_on_segment_2( Point(-250, 250), Point( 250, 250), + 50, back_inserter( p2)); + + /* Create test segment set. Prepare a vector for 100 segments. */ + vector segs; + segs.reserve(100); + + /* Create both fans at once from the precomputed points. */ + typedef vector::iterator I; + I i1 = p1.begin(); + I i2 = p2.begin(); + CGAL_Segment_generator g( i1, i2); + CGAL_ncopy( g, 100, back_inserter( segs)); + + /* Visualize segments. Can be omitted, see example programs */ + /* in the CGAL source code distribution. */ + CGAL_Window_stream W(512, 512); + W.init(-256.0, 255.0, -256.0); + W << CGAL_BLACK; + for( vector::iterator i = segs.begin(); i != segs.end(); i++) + W << *i; + + /* Wait for program termination. */ + char c; + cout << " Type any character to continue: " << endl; + cin >> c; + cout << " done" << endl; + + return 0; +} diff --git a/Packages/Generator/doc_tex/Generator/generators_prog1.C b/Packages/Generator/doc_tex/Generator/generators_prog1.C new file mode 100644 index 00000000000..6f6cd657a48 --- /dev/null +++ b/Packages/Generator/doc_tex/Generator/generators_prog1.C @@ -0,0 +1,64 @@ +/* generators_prog1.C */ +/* ------------------------------- */ +/* CGAL example program for point generators. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include /* only for visualization used */ + +typedef CGAL_Cartesian R; +typedef CGAL_Point_2 Point; + +int main() +{ + /* Create test point set. Prepare a vector for 1000 points. */ + vector points; + points.reserve(1000); + + /* Create 600 points within a disc of radius 150. */ + CGAL_Random_points_in_disc_2 g( 150.0); + CGAL_ncopy( g, 600, back_inserter( points)); + + /* Create 200 points from a 15 x 15 grid. */ + CGAL_points_on_square_grid_2( 500.0, 200, back_inserter(points),(Point*)0); + + /* Select 100 points randomly and append them at the end of */ + /* the current vector of points. */ + CGAL_random_selection( points.begin(), points.end(), 100, + back_inserter( points)); + + /* Create 100 points that are collinear to two randomly chosen */ + /* points and append them to the current vector of points. */ + CGAL_random_collinear_points_2( points.begin(), points.end(), 100, + back_inserter( points)); + + /* Check that we have really created 1000 points. */ + assert( points.size() == 1000); + + /* Use a random permutation to hide the creation history */ + /* of the point set. */ + random_shuffle( points.begin(), points.end(), CGAL_random); + + /* Visualize point set. Can be omitted, see example programs */ + /* in the CGAL source code distribution. */ + CGAL_Window_stream W(512, 512); + W.init(-256.0, 255.0, -256.0); + W << CGAL_BLACK; + for( vector::iterator i = points.begin(); i != points.end(); i++) + W << *i; + + /* Wait for program termination. */ + char c; + cout << " Type any character to continue: " << endl; + cin >> c; + cout << " done" << endl; + + return 0; +} diff --git a/Packages/Generator/doc_tex/Generator/generators_prog2.C b/Packages/Generator/doc_tex/Generator/generators_prog2.C new file mode 100644 index 00000000000..977266015c2 --- /dev/null +++ b/Packages/Generator/doc_tex/Generator/generators_prog2.C @@ -0,0 +1,68 @@ +/* generators_prog2.C */ +/* ------------------------------- */ +/* CGAL example program for point generators creating integer points. */ + +#include +#include +#include +#include +#include +#include + +typedef CGAL_Cartesian R; +typedef CGAL_Point_2 Point; + +/* Provide your own CGAL_build_point function. */ +inline +Point& CGAL_build_point( double x, double y, Point& p) { + p = Point( int(x), int(y)); + return p; +} + +#include +#include +#include /* only for visualization used */ + + +int main() +{ + /* Create test point set. Prepare a vector for 400 points. */ + vector points; + points.reserve(400); + + /* Create 250 points from a 16 x 16 grid. Note that the double */ + /* arithmetic _is_ sufficient to produce exact integer grid points. */ + /* The distance between neighbors is 34 pixel = 510 / 15. */ + CGAL_points_on_square_grid_2( 510.0, 250, back_inserter(points),(Point*)0); + + /* Lower, left corner. */ + assert( points[0].x() == -255); + assert( points[0].y() == -255); + + /* Upper, right corner. Note that 6 points are missing to fill the grid. */ + assert( points[249].x() == 255 - 6 * 34); + assert( points[249].y() == 255); + + /* Create 250 points within a disc of radius 150. */ + CGAL_Random_points_in_disc_2 g( 150.0); + CGAL_ncopy( g, 250, back_inserter( points)); + + /* Check that we have really created 500 points. */ + assert( points.size() == 500); + + /* Visualize point set. Can be omitted, see example programs */ + /* in the CGAL source code distribution. */ + CGAL_Window_stream W(524, 524); + W.init(-262.0, 261.0, -262.0); + W << CGAL_BLACK; + for( vector::iterator i = points.begin(); i != points.end(); i++) + W << *i; + + /* Wait for program termination. */ + char c; + cout << " Type any character to continue: " << endl; + cin >> c; + cout << " done" << endl; + + return 0; +} diff --git a/Packages/Generator/doc_tex/support/Generator/Segment_generator_prog1.C b/Packages/Generator/doc_tex/support/Generator/Segment_generator_prog1.C new file mode 100644 index 00000000000..190cf64fe3f --- /dev/null +++ b/Packages/Generator/doc_tex/support/Generator/Segment_generator_prog1.C @@ -0,0 +1,54 @@ +/* Segment_generator_prog1.C */ +/* ------------------------------- */ +/* CGAL example program for the generic segment generator. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include /* only for visualization used */ + +typedef CGAL_Cartesian R; +typedef CGAL_Point_2 Point; +typedef CGAL_Segment_2 Segment; + +int main() +{ + /* Create test segment set. Prepare a vector for 200 segments. */ + vector segs; + segs.reserve(200); + + /* Prepare point generator for the horizontal segment, length 200. */ + typedef CGAL_Random_points_on_segment_2 P1; + P1 p1( Point(-100,0), Point(100,0)); + + /* Prepare point generator for random points on circle, radius 250. */ + typedef CGAL_Random_points_on_circle_2 P2; + P2 p2( 250); + + /* Create 200 segments. */ + CGAL_Segment_generator g( p1, p2); + CGAL_ncopy( g, 200, back_inserter( segs)); + + /* Visualize segments. Can be omitted, see example programs */ + /* in the CGAL source code distribution. */ + CGAL_Window_stream W(512, 512); + W.init(-256.0, 255.0, -256.0); + W << CGAL_BLACK; + for( vector::iterator i = segs.begin(); i != segs.end(); i++) + W << *i; + + /* Wait for program termination. */ + char c; + cout << " Type any character to continue: " << endl; + cin >> c; + cout << " done" << endl; + + return 0; +} diff --git a/Packages/Generator/doc_tex/support/Generator/Segment_generator_prog2.C b/Packages/Generator/doc_tex/support/Generator/Segment_generator_prog2.C new file mode 100644 index 00000000000..25d51401689 --- /dev/null +++ b/Packages/Generator/doc_tex/support/Generator/Segment_generator_prog2.C @@ -0,0 +1,67 @@ +/* Segment_generator_prog2.C */ +/* ------------------------------- */ +/* CGAL example program for the generic segment generator */ +/* using precomputed point locations. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include /* only for visualization used */ + +typedef CGAL_Cartesian R; +typedef CGAL_Point_2 Point; +typedef CGAL_Segment_2 Segment; + +int main() +{ + /* Prepare two point vectors for the precomputed points. */ + vector p1, p2; + p1.reserve(100); + p2.reserve(100); + + /* Create points for a horizontal like fan. */ + CGAL_points_on_segment_2( Point(-250, -50), Point(-250, 50), + 50, back_inserter( p1)); + CGAL_points_on_segment_2( Point( 250,-250), Point( 250,250), + 50, back_inserter( p2)); + + /* Create points for a vertical like fan. */ + CGAL_points_on_segment_2( Point( -50,-250), Point( 50,-250), + 50, back_inserter( p1)); + CGAL_points_on_segment_2( Point(-250, 250), Point( 250, 250), + 50, back_inserter( p2)); + + /* Create test segment set. Prepare a vector for 100 segments. */ + vector segs; + segs.reserve(100); + + /* Create both fans at once from the precomputed points. */ + typedef vector::iterator I; + I i1 = p1.begin(); + I i2 = p2.begin(); + CGAL_Segment_generator g( i1, i2); + CGAL_ncopy( g, 100, back_inserter( segs)); + + /* Visualize segments. Can be omitted, see example programs */ + /* in the CGAL source code distribution. */ + CGAL_Window_stream W(512, 512); + W.init(-256.0, 255.0, -256.0); + W << CGAL_BLACK; + for( vector::iterator i = segs.begin(); i != segs.end(); i++) + W << *i; + + /* Wait for program termination. */ + char c; + cout << " Type any character to continue: " << endl; + cin >> c; + cout << " done" << endl; + + return 0; +} diff --git a/Packages/Generator/doc_tex/support/Generator/generators_prog1.C b/Packages/Generator/doc_tex/support/Generator/generators_prog1.C new file mode 100644 index 00000000000..6f6cd657a48 --- /dev/null +++ b/Packages/Generator/doc_tex/support/Generator/generators_prog1.C @@ -0,0 +1,64 @@ +/* generators_prog1.C */ +/* ------------------------------- */ +/* CGAL example program for point generators. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include /* only for visualization used */ + +typedef CGAL_Cartesian R; +typedef CGAL_Point_2 Point; + +int main() +{ + /* Create test point set. Prepare a vector for 1000 points. */ + vector points; + points.reserve(1000); + + /* Create 600 points within a disc of radius 150. */ + CGAL_Random_points_in_disc_2 g( 150.0); + CGAL_ncopy( g, 600, back_inserter( points)); + + /* Create 200 points from a 15 x 15 grid. */ + CGAL_points_on_square_grid_2( 500.0, 200, back_inserter(points),(Point*)0); + + /* Select 100 points randomly and append them at the end of */ + /* the current vector of points. */ + CGAL_random_selection( points.begin(), points.end(), 100, + back_inserter( points)); + + /* Create 100 points that are collinear to two randomly chosen */ + /* points and append them to the current vector of points. */ + CGAL_random_collinear_points_2( points.begin(), points.end(), 100, + back_inserter( points)); + + /* Check that we have really created 1000 points. */ + assert( points.size() == 1000); + + /* Use a random permutation to hide the creation history */ + /* of the point set. */ + random_shuffle( points.begin(), points.end(), CGAL_random); + + /* Visualize point set. Can be omitted, see example programs */ + /* in the CGAL source code distribution. */ + CGAL_Window_stream W(512, 512); + W.init(-256.0, 255.0, -256.0); + W << CGAL_BLACK; + for( vector::iterator i = points.begin(); i != points.end(); i++) + W << *i; + + /* Wait for program termination. */ + char c; + cout << " Type any character to continue: " << endl; + cin >> c; + cout << " done" << endl; + + return 0; +} diff --git a/Packages/Generator/doc_tex/support/Generator/generators_prog2.C b/Packages/Generator/doc_tex/support/Generator/generators_prog2.C new file mode 100644 index 00000000000..977266015c2 --- /dev/null +++ b/Packages/Generator/doc_tex/support/Generator/generators_prog2.C @@ -0,0 +1,68 @@ +/* generators_prog2.C */ +/* ------------------------------- */ +/* CGAL example program for point generators creating integer points. */ + +#include +#include +#include +#include +#include +#include + +typedef CGAL_Cartesian R; +typedef CGAL_Point_2 Point; + +/* Provide your own CGAL_build_point function. */ +inline +Point& CGAL_build_point( double x, double y, Point& p) { + p = Point( int(x), int(y)); + return p; +} + +#include +#include +#include /* only for visualization used */ + + +int main() +{ + /* Create test point set. Prepare a vector for 400 points. */ + vector points; + points.reserve(400); + + /* Create 250 points from a 16 x 16 grid. Note that the double */ + /* arithmetic _is_ sufficient to produce exact integer grid points. */ + /* The distance between neighbors is 34 pixel = 510 / 15. */ + CGAL_points_on_square_grid_2( 510.0, 250, back_inserter(points),(Point*)0); + + /* Lower, left corner. */ + assert( points[0].x() == -255); + assert( points[0].y() == -255); + + /* Upper, right corner. Note that 6 points are missing to fill the grid. */ + assert( points[249].x() == 255 - 6 * 34); + assert( points[249].y() == 255); + + /* Create 250 points within a disc of radius 150. */ + CGAL_Random_points_in_disc_2 g( 150.0); + CGAL_ncopy( g, 250, back_inserter( points)); + + /* Check that we have really created 500 points. */ + assert( points.size() == 500); + + /* Visualize point set. Can be omitted, see example programs */ + /* in the CGAL source code distribution. */ + CGAL_Window_stream W(524, 524); + W.init(-262.0, 261.0, -262.0); + W << CGAL_BLACK; + for( vector::iterator i = points.begin(); i != points.end(); i++) + W << *i; + + /* Wait for program termination. */ + char c; + cout << " Type any character to continue: " << endl; + cin >> c; + cout << " done" << endl; + + return 0; +}