Анализ форм: найти длину фигуры и ширину ее самого тонкого места
Что подразумевается под длиной фигуры, например, сосиски?
может, максимальный отрезок, который можно впихнуть в эту сосиску
Можно построить диаграмму Вороного, в ней есть информация о "ширине". Хотя это достаточно сложно.
Узкое место можно попробовать найти "расширяя" контур пока не появится пересечение. Но тут не очень очевидно, т.к. если 2 недалёкие точки вдоль одной стороны контура взять, то это как бы тоже за узкое место можно считать. Т.е. нужно как-то формализовать это понятие более "надёжно".
1. Выделить гантелю как связную область.
2. Найти ориентацию связной области(Что это такое хорошо описано в лекциях по машграфу ВМК 2ой курс. Или гуглить по словам: ось минимального второго момента.)
3. Через центр масс фигуры(см те же лекции или инет ) провести ось ориентации. Длина фигуры - это длина отрезка построенной оси, заключенной внутри фигуры. Ширина самого узкого места - минимальная длина отрезка, заключенного внутри фигуры и перпендикулярного построенной оси.
Если длина - это расстрояние между самыми дальними точками, то можно попробовать вписать в окружность каким-либо образом.Что-то я не понял, если длина — это расстояние между самыми дальними точками, то если известна граница, оно несложно ищется, даже есть эффективные алгоритмы за N log N. Можно прочитать, например, в Кормене.
Можно сделать подобным образом. Т.е. обходить границу, по некоторой окрестности прикидывать производную в данном месте, потом методом деления пополам раздувать окружность, которая касается контура в данной точке пока в нее не попадет заметно удаленная точка контура (это чтобы исключить всякие глюки, когда захватываются соседние точки). Вроде бы если перебрать эти окружности, то самое узкое место будет совпадать с локальными минимума диаметров этих окружностей. Но надо немного доработать (там как раз в углах сосиски не совсем понятные вещи происходят).
Что такое длина: понятия не имею, как ее формализовать. Если б знал — было бы проще. Однако большинство людей однозначно ее бы определили на глаз — значит, это объективная величина, и какое-то определение у нее должно быть.
Нет, длина фигуры — это не расстояние между самыми дальними точками (диаметр) и не длина отрезка. Если прямую сосиску согнуть в подкову, диаметр и макс. хорда уменьшатся, а длина сохранится. Фиг знает, как определить такую длину. Может, подкажете?
С его помощью можно найти длину сосики следующим образом: берём произвольную точку сосиски, и с помощью FSM находим граничную точку, наиболее удалённую от заданной. Теперь начинаем от неё, и находим опять наиболее удалённую. Так до тех пор, пока получающиеся расстояния не перестанут расти. Это мы найдём наибольшее кратчайшее расстояние между парой точек внутри нашей сосиски. Вполне разумно называть это длиной сосиски.
Мы что-то такое в школе проходили (называли его "метод волн" для поиска пути в лабиринте только сейчас об этом вспомнил.
минимальная длина собственной (i. e. состоящей из внутренних и граничных точек) кривой, соединяющей две точки, расстояние между которыми есть диаметр.
Мне кажется, автору хочется формализовать так, чтобы было ближе к бордовой, чем к салатовой линии.
Это можно сделать для штук, похожих на сосиску, тоже через те окружности, о которых я говорил. Это будет длина того самого ГМТ их центров плюс сумма радиусов граничных окружностей.
Ну можно сказать "наибольшая длина выпуклой кривой, целиком состоящей из..." Для фигур небольшой толщины это будет настолько же контринтуитивно.
можно попробовать формализовать длину как наидлиннейший путь в скелете,
а ширину как наибольшее уклонение от скелета.
по-крайней мере, в эту сторону можно подумать.
(у предложенного метода поиска длины, кстати, есть незначительный недостаток: если фигура ромб с углом чуть больше 60град, и если стартовать с тупого угла, то метод найдет малую диагональ вместо большой).
Оставить комментарий
dimi61
Есть растровая 2d-картинка. Допустим для простоты, что двухцветная, и если надо, то контур ее уже найден.На картинке не очень разветвленная фигура. Ожидается, что это может быть изогнутая сосиска или гантеля неправильной формы, или гантеля с дополнительными узлами типа гирлянды.
Хочется найти длину сосиски-гантели-гирлянды и ширину ее самого узкого места.
Есть ли стандартные способы? Если нет, то подбросьте, пожалуйста, идеи, как считать.
Спасибо.