Я пытаюсь отсортировать 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?
}