crashkkm писал(а): ↑15 ноя 2018, 12:37
Например имеется такая голубая граница, в нее надо вписать полигон на ровно 50,53 кв.м.
0) рисуете полигон по точкам границы, если его площадь менее требуемой, то задача не решается.
План А:
1) делаете на детальной сетке дистанционное преобразование от границы (считаете расстояние), и направление градиента (не D8, а реального) в точках границы.
2) Двигаете точки по градиенту, считаете расстояние. По трем расстояниям сдвига, решив квадратное уравнение, вычисляете на сколько нужно сдвинуть все точки.
План В:
1) делаете на детальной сетке дистанционное преобразование от границы (считаете расстояние).
2) Проводите изолинии по расстоянию, получаете полигоны и считаете площади. По трем значениям расстояний решаете квадратное уравнение, и получаете расстояние, на котором нужно провести изолинию.
3) Повторяете (2), пока не получите требуемую точность. Если не сойдется (начнет колебаться), используете (2) из плана А.
P.S. Можно ограничиться двумя точками, получится метод Ньютона-Рафсона (метод касательных), по 3 точкам сходится быстрее, но считать сложнее.