+
+static void
+model_init_wobbly (Model *model)
+{
+ const int width = 6, height = 6;
+ const int num_objects = width * height;
+ const int num_offset_springs = (width - 1) * height + width * (height - 1);
+ const int distance = 30;
+ double x, y;
+ int i, j, object_index, spring_index;
+
+ memset (model, 0, sizeof *model);
+ model->objects = g_new (Object, num_objects);
+ model->num_objects = num_objects;
+ model->offset_springs = g_new (OffsetSpring, num_offset_springs);
+ model->num_offset_springs = num_offset_springs;
+ model->k = 0.6;
+
+ model_init_polygons (model);
+
+ object_index = 0;
+ spring_index = 0;
+ for (i = 0; i < width; i++) {
+ for (j = 0; j < height; j++) {
+ x = 200 + i * distance;
+ y = 40 + j * distance;
+ model->objects[object_index].position.x = x;
+ model->objects[object_index].position.y = y;
+ model->objects[object_index].previous_position.x = x;
+ model->objects[object_index].previous_position.y = y;
+ model->objects[object_index].mass = 0.3;
+
+ if (i + 1 < width) {
+ model->offset_springs[spring_index].a = &model->objects[object_index];
+ model->offset_springs[spring_index].b = &model->objects[object_index + height];
+ model->offset_springs[spring_index].dx = distance;
+ model->offset_springs[spring_index].dy = 0;
+ spring_index++;
+ }
+
+ if (j + 1 < height) {
+ model->offset_springs[spring_index].a = &model->objects[object_index];
+ model->offset_springs[spring_index].b = &model->objects[object_index + 1];
+ model->offset_springs[spring_index].dx = 0;
+ model->offset_springs[spring_index].dy = distance;
+ spring_index++;
+ }
+
+ object_index++;
+ }
+ }
+}
+
+