Получение приближенных вершин замкнутых фигур с загнутыми кромками (для расчета центроида и других свойств)
Я собираюсь нарисовать контуры 2D-замкнутых неправильных форм с изогнутыми краями, а затем вычислить как (а) центр тяжести (центр тяжести) области фигуры, так и (б) центр тяжести периметра фигуры (т.е. центр тяжести, например, проволоки, плотно обернутой вокруг внешней стороны формы). У меня есть уровень владения поздним начинающим с Python и Matlab.
(a) и (b) достаточно просты, учитывая вершины многоугольника: центр тяжести области многоугольника задается здесь уравнением, а центр тяжести периметра многоугольника является просто средним значением всех средних точек отрезков, взвешенных по линии длины сегментов. Я уже написал несколько функций для этого.
Проблема в том, что я получаю / аппроксимирую эти вершины любым из известных мне способов рисования замкнутой фигуры с изогнутыми краями. Лучшее решение, которое я придумала, это использовать что-то вроде этого matplotlib
сценарий, чтобы нарисовать пышную форму, а затем вызвать path.to_polygons()
, который преобразует объекты Path в многоугольники - но делает это с удивительно низким разрешением, так что полученное приближение довольно плохое (и слишком плохое для моих целей - я бы хотел довольно точно вычислить эти центроиды).
Итак, я ищу либо (я) найти способ увеличить разрешение .to_polygons
(примерно в 10 раз), что было бы удовлетворительным для моих целей, или (ii) полностью опробовать новую стратегию. Один из вариантов - нарисовать фигуры, используя что-то вроде Adobe Illustrator, а затем получить аппроксимацию их вершин с помощью какого-либо плагина или, возможно, набора инструментов для обработки изображений (но я понятия не имею, как это сделать). Другой способ - нарисовать фигуру, используя некоторый набор инструментов / библиотеку, в которой уже есть встроенные функции для нахождения центроидов областей и периметров (я видел, что некоторые имели первое, но ни одного с последним). Но я уверен, что есть много других вариантов, которые я не рассматривал.