HustleCoder
@HustleCoder

Что делает эта функция(вычислительная геометрия, Си)?

Здравствуйте. Здесь 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, мне не очень понятно.
  • Вопрос задан
  • 88 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Это просто один из методов выделения памяти.
Если мало n байт, выделим 2n. Если и этого мало, то 4n, 8n, ... 2kn.
А 4 - это стартовое значение, оно используется если p->alloc ещё нулевое.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы