Здравствуйте. Здесь
https://rosettacode.org/wiki/Sutherland-Hodgman_po... приведена программа для обрезания многоугольника(subject) прямоугольником(clipper). В ней полигон задан структурой:
typedef struct { int len, alloc; vec v; } poly_t, *poly;
Далее есть функция:
void poly_append(poly p, vec v)
{
if (p->len >= p->alloc) {
p->alloc *= 2;
if (!p->alloc) p->alloc = 4;
p->v = (vec)realloc(p->v, sizeof(vec_t) * p->alloc);
}
p->v[p->len++] = *v;
}
Насколько я понимаю, она нужна для добавления к многоугольнику новой вершины. Но вот смысл этого условия:
if (p->len >= p->alloc) {
p->alloc *= 2;
if (!p->alloc) p->alloc = 4;
p->v = (vec)realloc(p->v, sizeof(vec_t) * p->alloc);
}
от меня как-то ускользает. То есть понимаю, что это для выделения памяти, но почему именно так, зачем умножается на 2, присваивается 4, мне не очень понятно.