我正在制作矢量绘图应用程序。我用这个算法生成轮廓。
这个算法效果很好,除了它没有关闭这里看到的轮廓: alt text http://img716.imageshack.us/img716/2633/noclosure.png
我不确定应该做些什么来确保它总是关闭大纲。我尝试在std :: vector中的位置[0]处插入最后一个顶点,但这没有帮助。
DOUBLEPOINT看起来像:
struct DOUBLEPOINT {
double point[2];
};
如何制作它,即使在尖角上也始终正确地关闭形状?
由于
答案 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)
尝试在绘制前将第一个和第二个点的副本附加到矢量的末尾。您的第一个和最后一个线段会重叠,但应确保所有点都连接在一起,并且所有角都是相同的圆角。