我正在实现基于扫描线的多边形填充算法。 我知道通用算法,我现在正试图用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]);
}
}
任何帮助都会很棒。
答案 0 :(得分:0)
感谢Michael的帮助和帮助,我能够打印出价值观。 现在,当我准备迭代边缘表并填充多边形时,这将帮助我访问这些值。
在向量中打印struct的值的正确方法是使用this for循环:
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 ++上生锈的人。