C++ 如何给Voronoi图的单元格着色

C++ 如何给Voronoi图的单元格着色,c++,boost,C++,Boost,我已经创建了一个点向量。每个点可以具有指定的16种颜色中的任意一种。我能够使用Boost库创建Voronoi图,但无法有效地为单元格着色。Boost文档说明有如下功能: void color(color_type color) const 设置单元格的颜色,但我找不到它的任何实现示例。Voronoi图的创建方式,我是无法做到的。请指向正确的方向。这就是我现在所拥有的 struct Point { double a; double b; Point(double x, d

我已经创建了一个点向量。每个点可以具有指定的16种颜色中的任意一种。我能够使用Boost库创建Voronoi图,但无法有效地为单元格着色。Boost文档说明有如下功能:

void color(color_type color) const
设置单元格的颜色,但我找不到它的任何实现示例。Voronoi图的创建方式,我是无法做到的。请指向正确的方向。这就是我现在所拥有的

struct Point {
    double a;
    double b;
    Point(double x, double y) : a(x), b(y) {}
};

// This point is mapped to Point concept of Boost.Code omitted

std::vector<Point_Collection> *points_info_vector;
points_info_vector = new std::vector<Point_Collection>();

for (int i = 0; i < 5000; i++) {
    Point_Collection xy_color = { Point(rand() % 1000, rand() % 1000), rand() % 16 };
    points_info_vector->push_back(xy_color);
}


std::vector<Point> *points;
points = new std::vector<Point>();

for (int i = 0; i < points_info_vector->size(); i++) {
    points->push_back(points_info_vector->at(i).xy);

}


voronoi_diagram<double> vd;

construct_voronoi(points->begin(), points->end(), &vd);
结构点{
双a;
双b;
点(双x,双y):a(x),b(y){}
};
//此点映射到Boost的点概念。代码省略
std::vector*points\u info\u vector;
points_info_vector=新标准::向量();
对于(int i=0;i<5000;i++){
Point_集合xy_color={Point(rand()%1000,rand()%1000),rand()%16};
点信息向量->推回(xy颜色);
}
std::向量*点;
点=新标准::向量();
对于(int i=0;isize();i++){
点->推回(点信息向量->在(i).xy);
}
沃罗诺图;
构造(点->开始(),点->结束(),&vd);

另外,有没有一种更有效的方法可以在点集合结构中使用construct_voronoi(),而不只是为点创建临时结构?

找到了一个部分答案:我们可以迭代单元格,找到生成器库给出的输入几何体的索引。引用文件:

源索引对应于发给每个输入几何体的唯一id(例如,Voronoi生成器使用的增量计数器)

因此,我可以做到:

for (voronoi_diagram<double>::const_cell_iterator it = vd.cells().begin(); it!= vd.cells().end(); it++ )
{       
    std::cout << it->source_index() << "\n" ;
    it->color(points_info_vector->at(it->source_index()).color);
}
for(voronoi_图::const_cell_迭代器it=vd.cells().begin();it!=vd.cells().end();it++)
{       
std::cout source\u index()颜色(points\u info\u vector->at(it->source\u index()).color);
}
因此,从这个索引中,我可以使用
void color(color\u type color)const
从我先前的向量索引中设置单元格的颜色


尽管如此,我还是想知道一种有效的方法,可以使用自定义结构迭代器作为函数参数创建Voronoi图,而不必将点复制到其他向量。

为什么要使用new来分配向量*?这违反了所有RAII规则。还有什么其他有效的方法?请指向正确的方向。矢量对象有4个指针长,它将为您处理所有内存分配。你可以将它声明为局部变量。你能用一个例子来解释它吗?或者为它链接一些资源?我不明白你的意思。