L'obtention de la boîte englobante d'un vecteur de points?

J'ai un vecteur de points stockés dans un std::vector instance. Je veux calculer la boîte englobante de ces points. J'ai essayé avec ce code:

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);
}

Mais ce code génère des résultats bizarres. En réalité, je suis intéressé uniquement les premier et dernier points de ma boîte englobante:

1------2
|\     |
| \    |
|  \   |
|   \  |
|    \ |
|     \|
3------4

Si mes points représentent la ligne diagonale, je suis intéressé uniquement dans les points 1 et 4.

Sont là des moyens intelligents pour l'obtenir avec les bibliothèques standard ou coup de pouce?


SOLUTION ACTUELLE:

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;
    }

OriginalL'auteur nkint | 2012-01-30