[ programmation en c++ ]

cléo_cesar Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   -
bonjour tout le monde.
voiçi mon petit probleme: je cherche a diviser un nuage de point par une ligne vertical et obtenir un nombre de poin egal de chaque coté de cette vertical et je ne sais pas trop comment m'y prendre!
quelqu'un peut-il m'aider?
merci
A voir également:

2 réponses

lirey83 Messages postés 75 Date d'inscription   Statut Membre Dernière intervention   13
 
essaies de prendre la verticale qui passe par le barycentre de tous tes points ...
0
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
Le barycentre ne marchera pas dans le cas général. Je pense que le plsu simple c'est de faire un set ordonné sur l'abscisse, et d'avancer dans son set tant qu'on n'a pas atteint la moitié. Note que si deux points peuvent avoir la même position il faut utiliser un multiset.
#include <set>
#include <iostream>

typedef std::pair<unsigned int,unsigned int> point_t;

unsigned int milieu(const std::set<point_t> & points){
    std::set<point_t>::const_iterator
        sit (points.begin()),
        send(points.end());
    for(unsigned int n=0;sit!=send;++sit,++n){
        if(n>=points.size()/2) return sit->first;
    }
    return 0;
}

int main(){
    std::set<point_t> points;
    points.insert(std::make_pair(3,5));
    points.insert(std::make_pair(6,9));
    points.insert(std::make_pair(2,8));
    points.insert(std::make_pair(1,1));
    std::cout << "xmilieu = " << milieu(points) << std::endl;
    return 0;
}
 

Normalement je pense que c'est bon (en fait par défaut les std::pair sont ordonnées d'abord sur le premier membre, donc ici l'abcisse, et ensuite sur le second membre)

Bonne chance
0