summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@redhat.com>2006-05-24 14:30:06 -0400
committerKristian Høgsberg <krh@dinky.bitplanet.net>2006-05-24 14:30:06 -0400
commit4ea6cfd18613d299d62dc95a4d53161d89745935 (patch)
treea01b7f6bac1c64f29d10f7a3a4bb92f8ae3a8b89
parent6923ae2757901728f2bc4ef2162ca5d14ecfbd14 (diff)
Add init functions for various objects, clean up model initializations.
-rw-r--r--Makefile2
-rw-r--r--akamaru.c28
-rw-r--r--akamaru.h5
-rw-r--r--main.c84
4 files changed, 62 insertions, 57 deletions
diff --git a/Makefile b/Makefile
index c98106c..dae1f08 100644
--- a/Makefile
+++ b/Makefile
@@ -8,5 +8,7 @@ objs = akamaru.o main.o
$(target) : $(objs)
+$(objs) : akamaru.h
+
clean :
rm $(target) $(objs)
diff --git a/akamaru.c b/akamaru.c
index 1d94281..d158f3e 100644
--- a/akamaru.c
+++ b/akamaru.c
@@ -25,6 +25,34 @@ const double friction = 1;
const double gravity = 20;
void
+object_init (Object *object, double x, double y, double mass)
+{
+ object->position.x = x;
+ object->position.y = y;
+ object->previous_position.x = x;
+ object->previous_position.y = y;
+ object->mass = mass;
+}
+
+void
+spring_init (Spring *spring, Object *a, Object *b, double length)
+{
+ spring->a = a;
+ spring->b = b;
+ spring->length = length;
+}
+
+void
+offset_spring_init (OffsetSpring *spring, Object *a, Object *b,
+ double dx, double dy)
+{
+ spring->a = a;
+ spring->b = b;
+ spring->dx = dx;
+ spring->dy = dy;
+}
+
+void
polygon_init (Polygon *p, int num_points, ...)
{
double dx, dy, length;
diff --git a/akamaru.h b/akamaru.h
index bfec60f..81eeb85 100644
--- a/akamaru.h
+++ b/akamaru.h
@@ -84,6 +84,11 @@ struct _Model {
double theta;
};
+void object_init (Object *object, double x, double y, double mass);
+void offset_spring_init (OffsetSpring *spring,
+ Object *a, Object *b, double dx, double dy);
+void spring_init (Spring *spring, Object *a, Object *b, double length);
+
void polygon_init (Polygon *p, int num_points, ...);
void polygon_init_diamond (Polygon *polygon, double x, double y);
void polygon_init_rectangle (Polygon *polygon, double x0, double y0,
diff --git a/main.c b/main.c
index c5b3060..3cef5e9 100644
--- a/main.c
+++ b/main.c
@@ -49,11 +49,8 @@ model_init_snake (Model *model)
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];
@@ -86,11 +83,7 @@ model_init_rope (Model *model)
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];
@@ -133,11 +126,7 @@ model_init_curtain (Model *model)
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;
@@ -185,11 +174,7 @@ model_init_grid (Model *model)
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;
@@ -220,6 +205,7 @@ model_init_molecule (Model *model)
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);
@@ -228,21 +214,17 @@ model_init_molecule (Model *model)
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);
}
}
@@ -255,7 +237,9 @@ model_init_wobbly (Model *model)
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);
@@ -266,35 +250,21 @@ model_init_wobbly (Model *model)
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++;
}
}
}