Я не слишком уверен в вашем понимании математики, поэтому, пожалуйста, примите мои извинения, если это идет над вашей головой, или если это действительно слишком просто объясняется, но решение, которое мне сразу же пришло в голову, - это использовать анализ Фурье на дискретной выборке ширины многоугольника под фиксированными углами.
Ваш подход к вращению на небольшую величину и тест можно считать дискретной выборкой непрерывной функции.
Мы знаем, что существует непрерывная функция, которая определяет меру, которую вы выполняете для каждого возможного поворота, вы просто оцениваете ее в заданных точках. то есть функция угла к ширине многоугольника, как известно, существует, и мы можем оценить ширину многоугольника для конечного набора углов при достаточном времени.
Итак, предположив, что мы могли бы найти выражение в терминах элементарных функций для этой функции угла на ширину, мы могли бы точно определить все углы, которые дают минимально возможную ширину, путем решения уравнения.
Мы знаем, что, поскольку вы вращаетесь через радианы с 2ПИ, функция ширины будет периодической с 2ПИ, и поэтому вы могли бы идеально реконструировать функцию, учитывая, что выбрано достаточное количество углов, применяя анализ Фурье.
Вопрос в том, сколько сэмплов нужно для идеальной реконструкции функции?
Я думаю, это определяется наименьшим расстоянием между граничными точками.
ceil(perimiterLength/smallestDistanceBetweenPoints);
Короче говоря, я пересэмплирую периметр границы, размещая равномерно расположенные образцы вдоль периметра, используя интервал, равный или меньший, чем наименьшее расстояние. Давайте назовем этот номер n. (Если честно, я не слишком уверен, правильно ли это)
Выборка точек в восточном и западном направлениях в n точках с равномерно распределенными углами через радианы 2PI и построение графика их разности в виде функции угла в n-точечной ширине.
Возьмите преобразование Фурье этого графика, чтобы получить наборы вещественных коэффициентов ряда Фурье, необходимые для определения функции расстояния
Используйте любой из ваших любимых методов для определения минимального значения функции.
Итак, я полагаю, что для вас в качестве примера треугольника вы определите, что вам нужно ceil (3 + root (3)) = 5 семплов. Рассчитайте расстояние в 0 2pi / 5 4pi / 5 6pi / 6 и 8pi / 5, возьмите преобразование Фурье этого результата и восстановите сигнал, создав формулу, подобную
a0 + a1 sin (t) + a2 sin (2t)
И тогда вы должны определить минимум этой функции (для которой есть много опций)