Как я могу отсортировать cv :: Vec6f против часовой стрелки, используя std :: sort? - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь отсортировать cv::Vec6f против часовой стрелки. Это две мои функции для выполнения сортировки. Как видите, я копирую каждый элемент cv::Vec6f в cv::Point2f экземпляр и добавляю его к std::vector. Это неправильно ...

Как мне перебрать и отсортировать мой cv::Vec6f объект?

cv::Vec2f find_centroid(cv::Vec6f const &triangle)
{
    float x = 0, y = 0;

    for (int i = 0; i < 6; i += 2)
        x += triangle[i];

    for (int i = 1; i < 6; i += 2)
        y += triangle[i];

    x /= 3;
    y /= 3;

    return cv::Vec2f(x, y);
}

void sort_triangle_ccw(cv::Vec6f &triangle)
{
    auto center = find_centroid(triangle);

    std::vector<cv::Point2f> points;

    for (auto i = 0; i < 6; i += 2)
    {
        cv::Point2f point{triangle[i], triangle[i+1]};

        points.push_back(point);
    }

    std::sort(points.begin(), points.end(), [center](const auto &a, const auto &b)
        {
            const auto a1_deg = to_degrees(atan2f(a.x - center[0], a.y - center[1])) + 360;
            auto a1 = fmod(a1_deg, 360.0f);

            const auto a2_deg = to_degrees(atan2f(b.x - center[0], b.y - center[1])) + 360;
            auto a2 = fmod(a2_deg, 360.0f);

            if (static_cast<int>(a2 - a1) < 0)
                return true;

            return false;
        });

     // How to convert back?
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...