+ universe = new Universe(10, world_width, world_height);
+
+ for(int n = 0; n < nb_pairs; n++) {
+ cout << "Example " << n << endl;
+
+ do {
+ universe->clear();
+
+ const int nb_attempts_max = 100;
+ int nb_attempts = 0;
+
+ for(int u = 0; u < 10; u++) {
+ Polygon *pol = 0;
+
+ nb_attempts = 0;
+
+ do {
+ scalar_t square_size = 80;
+
+ scalar_t x[] = {
+ - square_size * 0.5,
+ + square_size * 0.5,
+ + square_size * 0.5,
+ - square_size * 0.5,
+ };
+
+ scalar_t y[] = {
+ - square_size * 0.5,
+ - square_size * 0.5,
+ + square_size * 0.5,
+ + square_size * 0.5,
+ };
+
+ scalar_t delta = square_size / sqrt(2.0);
+ scalar_t object_center_x = delta + (world_width - 2 * delta) * drand48();
+ scalar_t object_center_y = delta + (world_height - 2 * delta) * drand48();
+ scalar_t red, green, blue;
+ red = drand48() * 0.8;
+ green = red;
+ blue = red;
+ delete pol;
+ pol = new Polygon(0.5,
+ red, green, blue,
+ x, y, sizeof(x)/sizeof(scalar_t));
+ pol->set_position(object_center_x, object_center_y, M_PI * 2 * drand48());
+ pol->set_speed(0, 0, 0);
+ universe->initialize_polygon(pol);
+ nb_attempts++;
+ } while(nb_attempts < nb_attempts_max && universe->collide(pol));
+
+ if(nb_attempts == nb_attempts_max) {
+ delete pol;
+ u = 0;
+ universe->clear();
+ nb_attempts = 0;
+ } else {
+ universe->add_polygon(pol);
+ }
+ }
+
+ grabbed_polygon = universe->pick_polygon(grab_start_x, grab_start_y);
+ } while(!grabbed_polygon);
+
+ const scalar_t scaling = 0.16;
+
+ {
+ char buffer[1024];
+ sprintf(buffer, "/tmp/universe_%03d_0.png", n);
+ FILE *file = fopen(buffer, "w");
+ generate_png(universe, scaling, file);