帮助连接大纲

时间:2010-07-16 21:47:14

标签: c++ c algorithm graphics vector

我正在制作矢量绘图应用程序。我用这个算法生成轮廓。

这个算法效果很好,除了它没有关闭这里看到的轮廓: alt text http://img716.imageshack.us/img716/2633/noclosure.png

我不确定应该做些什么来确保它总是关闭大纲。我尝试在std :: vector中的位置[0]处插入最后一个顶点,但这没有帮助。

DOUBLEPOINT看起来像:

struct DOUBLEPOINT {
double point[2];
};

如何制作它,即使在尖角上也始终正确地关闭形状?

由于

3 个答案:

答案 0 :(得分:1)

怎么样:

for( size_t i = 0; i < input.size(); ++i )
{
    POINTFLOAT cur;
    POINTFLOAT nxt;

    if( i == input.size() - 1 )
    {
       cur.x = input[i].point[0];
       cur.y = input[i].point[1];

       nxt.x = input[0].point[0];
       nxt.y = input[0].point[1];
    }
    else
    {
       cur.x = input[i].point[0];
       cur.y = input[i].point[1];

       nxt.x = input[i+1].point[0];
       nxt.y = input[i+1].point[1];
    }

答案 1 :(得分:1)

我通常只使用modulus

nxt = input[(i+1) % input.size()];

答案 2 :(得分:1)

尝试在绘制前将第一个和第二个点的副本附加到矢量的末尾。您的第一个和最后一个线段会重叠,但应确保所有点都连接在一起,并且所有角都是相同的圆角。