- 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);
-
- {
- 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);
+ if(skip < 0 || n >= skip) {
+
+ 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);
+
+ for(int s = 0; s < nb_frames; s++) {
+ if(s % every_nth == 0) {
+ int t = s / every_nth;
+ 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);
+
+ canvases[2 * t + 0]->clear();
+ draw_grabbing_point_on_canvas(canvases[2 * t + 0], scaling,
+ xf, yf, 0.0, 0.0, 0.0);
+ canvases[2 * t + 1]->clear();
+ draw_universe_on_canvas(canvases[2 * t + 1], scaling, universe);
+
+ if(show_grabbing_point) {
+ draw_grabbing_point_on_canvas(canvases[2 * t + 1], scaling,
+ xf, yf, 1.0, 0.0, 0.0);
+ }
+ }
+
+ if(s < nb_frames - 1) {
+ // Run the simulation
+ for(int i = 0; i < nb_iterations_per_steps; 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);
+ }
+ }