我有一个存储在std::vector
实例中的点向量。我想计算这些点的边界框。我试过这段代码:
bool _compare1(ofPoint const &p1, ofPoint const &p2) {
return p1.x < p2.x && p1.y < p2.y;
}
bool _compare4(ofPoint const &p1, ofPoint const &p2) {
return p1.x > p2.x && p1.y > p2.y;
}
vector<ofPoint> points;
// ...
if(points.size()>1) {
ofPoint p_min = *std::min_element(points.begin(), points.end(), &_compare1);
ofPoint p_max = *std::min_element(points.begin(), points.end(), &_compare4);
}
但是这段代码会产生奇怪的结果。实际上,我只对边界框的第一个和最后一个点感兴趣:
1------2
|\ |
| \ |
| \ |
| \ |
| \ |
| \|
3------4
如果我的点代表对角线,我只对第 1 点和第 4 点感兴趣。
有没有聪明的方法可以通过标准库或 Boost 来实现这一点?
当前解决方案:
bool _compare_min_x(ofPoint const &p1, ofPoint const &p2) { return p1.x < p2.x; }
bool _compare_min_y(ofPoint const &p1, ofPoint const &p2) { return p1.y < p2.y; }
// ....
if(points.size()>1) {
min_x = (*std::min_element(points.begin(), points.end(), &_compare_min_x)).x;
min_y = (*std::min_element(points.begin(), points.end(), &_compare_min_y)).y;
max_x = (*std::max_element(points.begin(), points.end(), &_compare_min_x)).x;
max_y = (*std::max_element(points.begin(), points.end(), &_compare_min_y)).y;
}