8

たとえば、座標のグループがあります。

10,40; 9,27; 5,68; 7,55; 8,15;

ソートされた Y 軸の正しい X 軸を失うことなく、これらの座標をソートするにはどうすればよいですか。

上記の例から、座標を並べ替えて、正しい出力が次のようになるようにします。

8,15; 9,27; 10,40; 7,55; 5,68。

どんな提案でも大歓迎です。ありがとうございました。

4

3 に答える 3

21

std::sort のドキュメント

#include "opencv2/core/core.hpp"
#include <algorithm>    // std::sort

// This defines a binary predicate that, 
// taking two values of the same type of those 
// contained in the list, returns true if the first 
// argument goes before the second argument
struct myclass {
    bool operator() (cv::Point pt1, cv::Point pt2) { return (pt1.y < pt2.y);}
} myobject;

int main () {
    // input data
    std::vector<cv::Point> pts(5);
    pts[0] = Point(10,40);
    pts[1] = Point(9,27);
    pts[2] = Point(5,68);
    pts[3] = Point(7,55);
    pts[4] = Point(8,15);

    // sort vector using myobject as comparator
    std::sort(pts.begin(), pts.end(), myobject);
}
于 2013-05-28T16:23:51.497 に答える
1

座標のグループを正確に保存する方法を指定する必要があります。

最も簡単な方法は、作成した新しい構造体としてそれらを保存し、Y 値をソート パラメーターとして使用して、その上に基本的なバブル ソート アルゴリズムを適用することです。次に、構造体の位置を「交換」すると、X と Y は一緒にとどまります。

struct Vector {
  float x;
  float y;
};
于 2013-05-28T16:12:59.767 に答える
0

座標をマップするクラスを作成できます。STL をベクターとして使用している場合は、sort メソッドを使用して、Y 座標に基づいてベクター全体を並べ替えることができます。

ここここに、スタックからの同様の質問があります。

于 2013-05-28T16:13:53.017 に答える