Как отметил Марк, мы можем использовать ограниченную оптимизацию, чтобы найти квадрат со стороной 2, который минимизирует квадрат расстояния до углов оригинала.
Нам нужно минимизировать f = (a-A)^2 + (b-B)^2 + (c-C)^2 + (d-D)^2
(где квадратфактически является точечным произведением векторного аргумента с самим собой) с учетом некоторых ограничений.
Следуя методу множители Лагранжа , я выбрал следующие ограничения расстояния:
g1 = (a-b)^2 - 4
g2 = (c-b)^2 - 4
g3 = (d-c)^2 - 4
и следующие угловые ограничения:
g4 = (b-a).(c-b)
g5 = (c-b).(d-c)
Быстрый набросок салфетки должен убедить вас в том, что этих ограничений достаточно.
Затем мы хотим минимизировать f при условии, что все g равны нулю.
Функция Лагранжа:
L = f + Sum (i = от 1 до 5, li gi)
, где li
s - множители Лагранжа.
Градиент нелинейный, поэтому мы должны взять гессиан и использовать многовариантный метод Ньютона для итерации к решению.
Вот решение, которое я получил (красный) дляданные приведены (черный):
Это заняло 5 итераций, после чего L2 норма шага была 6,5106e-9.