model_init_polygons (model);
for (i = 0; i < num_objects; i++) {
- model->objects[i].position.x = random() % 200 + 20;
- model->objects[i].position.y = random() % 200 + 20;
- model->objects[i].previous_position.x = random() % 200 + 20;
- model->objects[i].previous_position.y = random() % 200 + 20;
- model->objects[i].mass = 1;
+ object_init (&model->objects[i],
+ random() % 200 + 20, random() % 200 + 20, 1);
if (i + 1 < num_objects) {
model->sticks[i * 2].a = &model->objects[i];
model_init_polygons (model);
for (i = 0; i < num_objects; i++) {
- model->objects[i].position.x = 200;
- model->objects[i].position.y = 40 + i * stick_length;
- model->objects[i].previous_position.x = 200;
- model->objects[i].previous_position.y = 40 + i * stick_length;
- model->objects[i].mass = 1;
+ object_init (&model->objects[i], 200, 40 + i * stick_length, 1);
if (i + 1 < num_objects) {
model->sticks[i].a = &model->objects[i];
x = 200 + i * rope_offset;
y = 40 + j * stick_length;
index = i * num_rope_objects + j;
- model->objects[index].position.x = x;
- model->objects[index].position.y = y;
- model->objects[index].previous_position.x = x;
- model->objects[index].previous_position.y = y;
- model->objects[index].mass = 1;
+ object_init (&model->objects[index], x, y, 1);
if (j + 1 < num_rope_objects) {
stick_index = i * (num_rope_objects - 1) + j;
x = 200 + i * rope_offset;
y = 40 + j * string_length;
index = i * num_rope_objects + j;
- model->objects[index].position.x = x;
- model->objects[index].position.y = y;
- model->objects[index].previous_position.x = x;
- model->objects[index].previous_position.y = y;
- model->objects[index].mass = 1;
+ object_init (&model->objects[index], x, y, 1);
if (i + 1 < num_ropes) {
string_index = i * num_rope_objects + j;
const int num_springs = num_objects * 2;
const int spring_length = 50;
int i;
+ Spring *spring;
memset (model, 0, sizeof *model);
model->objects = g_new (Object, num_objects);
model->num_springs = num_springs;
model->k = 2;
- for (i = 0; i < num_objects; i++) {
- model->objects[i].position.x = 200 + i * 20;
- model->objects[i].position.y = 200;
- model->objects[i].previous_position.x = 200 + i * 20;
- model->objects[i].previous_position.y = 200;
- model->objects[i].mass = 0;
- }
+ for (i = 0; i < num_objects; i++)
+ object_init (&model->objects[i], 200 + i * 20, 200, 0);
+ spring = model->springs;
for (i = 0; i < num_objects; i++) {
- model->springs[i * 2].a = &model->objects[i];
- model->springs[i * 2].b = &model->objects[(i + 1) % num_objects];
- model->springs[i * 2].length = spring_length;
- model->springs[i * 2 + 1].a = &model->objects[i];
- model->springs[i * 2 + 1].b = &model->objects[(i + 2) % num_objects];
- model->springs[i * 2 + 1].length = spring_length;
+ spring_init (spring++, &model->objects[i],
+ &model->objects[(i + 1) % num_objects],
+ spring_length);
+ spring_init (spring++, &model->objects[i],
+ &model->objects[(i + 2) % num_objects],
+ spring_length);
}
}
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;
+ int i, j;
+ Object *object;
+ OffsetSpring *spring;
memset (model, 0, sizeof *model);
model->objects = g_new (Object, num_objects);
model_init_polygons (model);
- object_index = 0;
- spring_index = 0;
+ object = model->objects;
+ spring = model->offset_springs;
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;
-
- 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++;
- }
+ object_init (object, x, y, 0);
+
+ if (i + 1 < width)
+ offset_spring_init (spring++, object, object + height, distance, 0);
- 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++;
- }
+ if (j + 1 < height)
+ offset_spring_init (spring++, object, object + 1, 0, distance);
- object_index++;
+ object++;
}
}
}