X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=generate.cc;h=28115b1a5326e7bc29b275a8ff1582f77448440a;hb=804de9eaa678ecf50ab0ed0fbef027fe6dbce414;hp=c338a1ee626bf9524aa0e372150325ad1a597466;hpb=098b9a0fc3c08e541e26ee34d03ddbe27edad40f;p=universe.git diff --git a/generate.cc b/generate.cc index c338a1e..28115b1 100644 --- a/generate.cc +++ b/generate.cc @@ -31,6 +31,7 @@ using namespace std; void generate_png(Universe *universe, scalar_t scale, FILE *file) { CanvasCairo canvas(scale, universe->width(), universe->height()); + canvas.set_line_width(2.0); universe->draw(&canvas); canvas.write_png(file); } @@ -45,13 +46,19 @@ int main(int argc, char **argv) { Polygon *grabbed_polygon; if(argc < 2 || argc > 3) { - cerr << argv[0] << " []" << endl; + cerr << argv[0] << " [ []]" << endl; exit(1); } int nb_pairs = atoi(argv[1]); + char dir[1024] = "/tmp/"; + if(argc > 2) { + strncpy(dir, argv[2], sizeof(dir) / sizeof(char) - 1); + } + + if(argc > 3) { srand48(atoi(argv[1])); } @@ -92,7 +99,7 @@ int main(int argc, char **argv) { 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; + red = 0.90; green = red; blue = red; delete pol; @@ -120,29 +127,72 @@ int main(int argc, char **argv) { const scalar_t scaling = 0.16; + CanvasCairo grab_trace(scaling, world_width, world_height); + { char buffer[1024]; - sprintf(buffer, "/tmp/universe_%03d_0.png", n); + sprintf(buffer, "%s/dyn_%06d_world_0.png", dir, n); FILE *file = fopen(buffer, "w"); generate_png(universe, scaling, file); + fclose(file); } scalar_t grab_relative_x = grabbed_polygon->relative_x(grab_start_x, grab_start_y); scalar_t grab_relative_y = grabbed_polygon->relative_y(grab_start_x, grab_start_y); + // scalar_t grab_previous_x = grab_start_x, grab_previous_y = grab_start_y; + + { + int n = 36; + scalar_t xp[n], yp[n]; + for(int k = 0; k < n; k++) { + scalar_t radius = 1/scaling; + scalar_t alpha = 2 * M_PI * scalar_t(k) / scalar_t(n); + xp[k] = grab_start_x + radius * cos(alpha); + yp[k] = grab_start_y + radius * sin(alpha); + } + grab_trace.set_drawing_color(0.0, 0.0, 0.0); + grab_trace.set_line_width(1.0); + grab_trace.draw_polygon(1, n, xp, yp); + } + const int nb_iterations = 250; scalar_t dt = 0.1; - for(int i = 0; i < 500; i++) { + for(int i = 0; i < nb_iterations; i++) { scalar_t xf = grabbed_polygon->absolute_x(grab_relative_x, grab_relative_y); scalar_t yf = grabbed_polygon->absolute_y(grab_relative_x, grab_relative_y); grabbed_polygon->apply_force(dt, xf, yf, 0.0, -1.0); universe->update(dt); + + /* + { + scalar_t xp[2], yp[2]; + xp[0] = grab_previous_x; + yp[0] = grab_previous_y; + xp[1] = xf; + yp[1] = yf; + grab_previous_x = xf; + grab_previous_y = yf; + + grab_trace.set_drawing_color(0.0, 0.0, 0.0); + grab_trace.draw_polygon(1, 2, xp, yp); + } + */ } { char buffer[1024]; - sprintf(buffer, "/tmp/universe_%03d_1.png", n); + sprintf(buffer, "%s/dyn_%06d_world_1.png", dir, n); FILE *file = fopen(buffer, "w"); generate_png(universe, scaling, file); + fclose(file); + } + + { + char buffer[1024]; + sprintf(buffer, "%s/dyn_%06d_grab.png", dir, n); + FILE *file = fopen(buffer, "w"); + grab_trace.write_png(file); + fclose(file); } }