{
int i;
point *p;
+ struct vec moves[MAXPOINTS];
for (i = 0; i < nextpoint; i++) {
p = &points[i];
if (p->next == NULL) continue;
assert(p->prev != NULL);
+ moves[i].x = moves[i].y = 0;
/* Move left-edge points horizontally */
if (p->prev->v.y <= p->v.y && p->v.y <= p->next->v.y)
- p->v.x -= weight->weight;
+ moves[i].x -= weight->weight;
/* Move top inner corner points along NE/SW diagonal */
if (p->prev->v.y < p->v.y && p->v.y > p->next->v.y &&
p->prev->v.x > p->v.x && p->v.x > p->next->v.x) {
- p->v.x -= weight->weight/2;
- p->v.y -= weight->weight/2;
+ moves[i].x -= weight->weight/2;
+ moves[i].y -= weight->weight/2;
}
/* Move bottom inner corner points along NW/SE diagonal */
if (p->prev->v.y > p->v.y && p->v.y < p->next->v.y &&
p->prev->v.x < p->v.x && p->v.x < p->next->v.x) {
- p->v.x -= weight->weight/2;
- p->v.y += weight->weight/2;
+ moves[i].x -= weight->weight/2;
+ moves[i].y += weight->weight/2;
}
}
+ for (i = 0; i < nextpoint; i++) {
+ p = &points[i];
+ if (p->next == NULL) continue;
+ assert(p->prev != NULL);
+ p->v.x += moves[i].x;
+ p->v.y += moves[i].y;
+ }
}
static void