Bonjour,

J'ai un vecteur de points que je souhaite trier de gauche à droite et de bas en haut.

Pour l'instant, j'arrive à le trier de façon symétrique en définissant ma propre fonction de tri que je donne à std::sort. J'utilise une distance non signée.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct sortLeftUpRightDown
  {
    inline bool operator() (const cv::Point & m1, const cv::Point & m2) const
    {
      // diagonale
      float vx = m2.x - m1.x;
      float vy = m2.y - m1.y;
 
      if(vx+vy<0)
        return true;
      else
        return false;
    }
  };
Lorsque je tente d'implémenter une fonction de tri de gauche à droite et de bas en haut. J'ai std::sort() qui plante. J'ai tenté ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct sortLeftUpRightDown
  {
    inline bool operator() (const cv::Point & m1, const cv::Point & m2) const
    {
      // diagonale
      float vx = m2.x - m1.x;
      float vy = m2.y - m1.y;
 
      if(vy<0)
        return true;
      else
        if(vx<0)
        return true;
        else
        return false;
    }
  };
Si vous avez une réponse à mon problème, je suis preneur.