首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扫描线多边形填充算法

扫描线多边形填充算法
EN

Stack Overflow用户
提问于 2012-09-26 03:31:00
回答 1查看 5.5K关注 0票数 2

我正在实现一个基于扫描线的多边形填充算法。我知道一般的算法,现在我正在尝试用C++实现它。

我需要实现一个活动的边列表的边表。

我已经使活动边列表成为一个向量,便于动态插入和删除。

然而,边缘表有点令人困惑。

我正在尝试使用向量数组来实现边表,向量将包含我创建的结构。

这是结构。

代码语言:javascript
复制
struct Bucket
{
    // Fields of a bucket list
    int ymax, x, dx, dy, sum;
};

我有一个for循环,它遍历传入的顶点数组,然后创建一个存储桶,并将该存储桶插入到边表中的ymin索引处。

我的问题是,我很难遍历边缘表并访问各个存储桶。

下面是存储桶向量数组的声明:

代码语言:javascript
复制
// 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作为索引,但在尝试打印每个存储桶的值时,这两种方法都不起作用。

代码语言:javascript
复制
// 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]);
            }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-26 03:51:40

多亏了Michael的帮助,我才能把这些值打印出来。当我准备好迭代边缘表并填充多边形时,这也将帮助我访问这些值。

在向量中打印结构值的正确方法是使用for循环:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12589822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档