所以我需要使用格雷厄姆扫描算法制作一个凸包,但我有问题,我得到了这个有点凸:
void draw_line(Line l, Canvas& canvas) {
canvas.draw_line(l.a, l.b);
}
double drandom(){
return rand() * 1. / RAND_MAX;
}
bool is_convex(const vector<PairXY> vertex){}
void draw_picture(Canvas & canvas) {
vector <PairXY> vertex;
vector <PairXY>:: const_iterator iter = vertex.begin();
srand((unsigned)time(0));
在这里我添加凸点的随机点
for (int i=5;i!=0;i--) {
vertex.push_back(PairXY(drandom()*640,drandom()*480));
}
在这里,我找到了开始的第一个和最低点。
for (int i=0;i!=5;i++) {
if (vertex[i].y > vertex[i+1].y)
vertex.push_back(vertex[i]);
}
在这里,我对所有剩余的点进行排序。
for (int m=1;m!=4;m++){
for (int i=m;i!=5;i++) {
if (vertex[i].x > vertex[i+1].x)
vertex.push_back(vertex[i]);
}
}
vector<PairXY>::const_iterator i=vertex.begin(), j=i;
在这里我画出凸面。
for(;++i != vertex.end(); j++)
draw_line(Line(*j, *i), canvas);
if (j != vertex.end())
draw_line(Line(*j, *vertex.begin()), canvas);
}
有人可以告诉我我做错了什么吗?