как определить угол поворота эллипса и заполнить область между точками в opencv, Stack Overflow

У меня есть три точки, скажем, C в качестве центральной точки, в то время как P1 и P2 две другие точки.
Я вычислил угол между C и P1, известным как angle1 и c p2, который называется углом 2.
вот код, который я использую для его вычисления

angle1 = atan2(p1.y - c.y, p1.x - c.x);
angle2 = atan2(p2.y - c.y, p2.x - c.x);

после этого я изменил их в градусы с помощью этого.

if (angle1 >= 0)
angle1 = angle1 * (180 / PI);
else
angle1 = (angle1 + 2 * PI) * (180 / PI);

if(angle2 >= 0)
angle2 = angle2 * (180 / PI);
else
angle2 = (angle2 + 2 * PI) * (180 / PI);

Затем я использую этот метод openCv для вычисления отрисовки дуги, иногда дуга идеально подходит между двумя точками, а иногда она заполняет всю окружность, кроме двух точек, которые я выкладываю здесь.

radius = sqrt(pow(c.x - p1.x, 2.0) + pow(c.y - p1.y, 2.0));
ellipse(outPutMat, c, cv::Size(radius, radius), 0, angle1, angle2, Scalar(0, 0, 0), -1, 8, 0);

вот изображения
введите описание изображения здесь

введите описание изображения здесь

красные точки — это точки, а черный — это эллипс, заполненный цветом.
Для 1-го изображения agngle1 = 42.1376, а angle2 = 338.962
Для 2-го изображения agngle1 = 152,447, а angle2 = 223,363

2-е изображение дает правильные результаты, но первое неверно. Я просто хочу заполнить область между точками.

0

Решение

После короткой проверки — кажется, что функция OpenCV вычисляет средний угол как ma = (angle1 + angle2) / 2 и рисует дугу через эту точку.

Оба (-45,45) и (45, -45) дают одинаковую дугу 90 градусов через ноль, а оба (315,45) и (45,315) дают одинаковую дугу 270 градусов.

Чтобы получить желаемый результат, вы не должны сопоставлять отрицательный угол с положительным значением ((angle1 + 2 * PI)) и использовать 42 а также -21 значения в первом случае.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector