我正在实现一个基于扫描线的多边形填充算法。我知道一般的算法,现在我正在尝试用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]);
}
}发布于 2012-09-26 03:51:40
多亏了Michael的帮助,我才能把这些值打印出来。当我准备好迭代边缘表并填充多边形时,这也将帮助我访问这些值。
在向量中打印结构值的正确方法是使用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++上也不熟悉的人。
https://stackoverflow.com/questions/12589822
复制相似问题