Сначала я напишу набросанный ответ и, возможно, расширю его, если вам интересно идти по этому пути. У меня есть программа для вычисления этого в Mathematica (с некоторыми ограничениями), и я также опубликую ее, если у меня будет время закончить.
Проблема состоит из двух частей:
- Найдите многоугольные перегородки, которые дают желаемое соотношение площади
- Выберите из них тот, который минимизирует соотношение сторон
Давайте сначала посмотрим на первую проблему. Вы можете сделать что-то вроде:
Рассмотрим каждую пару сторон, как показано на следующем рисунке
И для каждой пары рассмотрим три следующие области:
Таким образом, максимальные и минимальные отношения, которые вы можете получить для разбиения многоугольника с линией, пересекающей эти две стороны, составляют Min()
и Max[]
из следующего набора:
{ (S1+S2)/S3, S3/(S1+S2), (S2+S3)/S1, S1/(S2+S3) }
Если желаемое соотношение не находится между максимальным и минимальным значениями этого набора, отбросьте пару.
Примечание: Для расчета площадей вы можете использовать эту формулу
Как только вы получите все пары кандидатов, проблема заключается в том, чтобы найти функцию только одного параметра, который описывает все возможные разбиения четырехугольника, который учитывает желаемое соотношение.
Если вы параметризовали обе стороны уравнением, подобным
{x, y} = {A} + t {B- A}
вы сможете получить что-то вроде этого:
И вы можете найти зеленую область по той же формуле, в зависимости от двух параметров (по одному на каждую сторону). Я загрузил его в ideone , просто потому, что это слишком неуклюже, чтобы публиковать здесь
Следующий шаг сводит проблему только к одному параметру. Это делается с учетом того, что вы хотите иметь определенный коэффициент площади для вашего полного многоугольника.
Из этих двух уравнений вы получаете связь (гиперболу) между обоими параметрами для каждой пары сторон. Все эти разрезы имеют желаемое соотношение площадей.
Следующим шагом является вычисление соотношения сторон и выбор минимума. Поскольку функции довольно плавные, все, что вам нужно сделать, это запрограммировать экстремальный искатель.
здесь вы можете увидеть результаты для соотношения сторон для шестиугольника, взяв одну вершину в качестве точки разделения следующим образом:
А график соотношения сторон для каждой области:
Где каждая единица на оси x соответствует одной стороне.
Дайте мне знать, если вы хотите больше подробностей ...