Определить "тангенциальный четырехугольник" из 4-х точек в OpenCv
Что я пытаюсь сделать, это получить тангенциальный четырехугольник из 4 точек, используя OpenCv
,
Я попробовал подход, где я просто беру центр четырех точек и добавляю круг. Но это не всегда так. Далее очень сложно определить радиус круга.
Коротко: Тангенциальный четырехугольник - это круг, который полностью лежит внутри квадрата. например:
Источник: https://commons.wikimedia.org/wiki/File:Tangentenviereck.svg CC BY-SA 4.0
Есть ли способ в OpenCv для этого?
1 ответ
Если у вас 4 точки A,B, C, D, у вас уже есть четырехугольник (четырехсторонний многоугольник).
Не гарантируется, что это тангенциальное является тангенциальным - это верно, только если суммы противоположных длин сторон равны.
Если у вас действительно есть вершины тангенциального тангенциального - найдите длину сторон a,b,c,d и диагоналей p,q и получите радиус окружности как
r = Sqrt(4*p^2*q^2-(a^2-b^2+c^2-d^2)^2)) / (2*(a+b+c+d))
На вики-странице есть много формул для центра вогнутости, но я бы использовал тригонометрический подход - получить вектор биссектрисы угла A как сумму нормализованных векторов AB и AD, нормализовать его, умножить на длину |AM|=r/tg(A/2) и добавить полученный вектор к A.
Обратите внимание, что OpenCV - это библиотека для обработки изображений, а не для геометрических вычислений.