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

#c #opencv #math #linear-algebra #ellipse

#c #opencv #математика #линейная алгебра #эллипс

Вопрос:

У меня есть три точки, скажем, 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-е изображение дало правильные результаты, но первое неверно. Я просто хочу заполнить область между точками.

Ответ №1:

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

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

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

Комментарии:

1. Я уже исправил эту проблему. Спасибо за ответ. ваш ответ также правильный.