Andrey1 писал(а):Hi ALL!
Интересует задача нахождения параметров 7-параметрического преобразования из двух массивов координат точек, заданных в двух системах координат.
Как технично и изящно решить такую задачу, не прибегая к тупому перебору по всем семи параметрам с постепенным приближением?
Функция 7ПП давно написана, но вот как найти эти параметры???
Если это разовая задача (в смысле, что не очень важна скорость нахождения оптимума), то я рекомендую посмотреть в сторону генетических алгоритмов.
Очень удобная штука из серии "один раз изучил, всю жизнь пользуешься".
Если коротко суть решения будет такая:
1. Генерируете несколько (достаточно много) массивов из семи элементов. Каждый массив содержит некоторый набор параметров для вычисления функции 7ПП. Такой семиэлементный массив назовем геном. А все множество массивов назовем популяцией.
2. Вычисляете для каждого массива при помощи функции преобразования новые координаты для нескольких точек. Сравниваете получившиеся координаты с ожидаемыми. Чем меньше разница между ожидаемым и расчетным, тем "здоровее" ген.
3. Выбираете несколько здоровых генов и "скрещиваете" их между собой. Скрещивание можно провести так:случайно генерируете число x в интервале от 1 до 7. Берете два гена-родителя разделяете их в точке x на две части (два подмассива) и эти части перемешиваете - получаете двух потомков.
4. Выбираете в популяции слабые ("больные") гены. Если "здоровье" получившихся потомков больше, чем здоровье слабых генов, то замещаете слабые более сильными. Так популяция становится все "здоровее" и "здоровее"
5. Проводите (с некоторой вероятностью) мутацию: изменяете случайно выбранный ген (даете ему новые параметры). Так в популяции появляется новый материал для скрещивания.
6. Пунты 3-5 повторяете в цикле несколько раз до тех пор, пока процесс эволюции не приведет к образованию гена, решающего задачу с достаточной точностью.