Алгоритм заполнения полигона линии сканирования

Я реализую алгоритм сканирования полигонов на основе линии сканирования.
Я знаю общий алгоритм, и сейчас я пытаюсь реализовать его в C ++.

Мне нужно реализовать таблицу краев активный список краев.

Я сделал список активных ребер вектором для легкой вставки и удаления динамически.

Однако таблица границ немного более запутана.

Я пытаюсь реализовать таблицу границ, используя массив векторов, и векторы будут содержать структуру, которую я создал.

Вот структура.

struct Bucket
{
// Fields of a bucket list
int ymax, x, dx, dy, sum;
};

У меня есть цикл for, который перебирает массив переданных вершин, а затем он создает сегмент и вставляет сегмент в таблицу ребер по индексу ymin для ребра.

Моя проблема в том, что мне трудно зацикливаться на граничной таблице и получать доступ к отдельным сегментам.

Вот объявление массива векторов сегментов:

// This array is the edge table which has a max index of 300
// The window for the program is never more than 300 by 300
vector<Bucket> et[300];

Вот мой цикл for, который перебирает таблицу границ, пытаясь распечатать элементы.
Я попытался использовать итератор и обычный int для индекса, но ни один из них не работает при попытке вывести значения каждого сегмента.

// Debugging the edge table, prints out all buckets
vector<Bucket>::iterator it;
for(int j = 0; j < 300; j++)
{
for(it = et[j].begin(); it < et[j].end(); it++)
{
//                printf(*it);
//                printf();
}
for(int q = 0; q < et[j].size(); q++)
{
printf("ymax = %d", q[0]);
}
}

Любая помощь будет отличной.

2

Решение

Благодаря игре и помощи от Майкла я смог распечатать значения.
Теперь это также поможет мне получить доступ к этим значениям, когда я буду готов перебрать таблицу границ и заполнить многоугольник.

Правильный способ напечатать значения структуры внутри вектора — использовать это для цикла:

vector<Bucket>::iterator it;
for(int j = 0; j < 300; j++)
{
for(int q = 0; q < et[j].size(); q++)
{
printf("ymax = %d, x = %d, dx = %d, dy = %d, sum = %d,\n", et[j][q].ymax, et[j][q].x, et[j][q].dx, et[j][q].dy, et[j][q].sum);
}
}

Я надеюсь, что это может помочь другим, кто также ржав на c ++.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]