Добрый день.
Я сейчас пытаюсь разобраться с этой задачей:
Даны: правильный четырехугольник и квадрат, которые заданы своими координатами A(x1,y1), B(x2,y2), C(x3,y3), D(x4,y4) и M(0,0), N(1,0), P(1,1), K(0,1) соответственно.
Есть точка P(x,y), которая находится в этом четырехугольнике.
Нужно: Построить матрицу проективного преобразования для преобразования ABCD в квадрат MNPK. Далее нужно найти положение точки P`(x`,y`) в квадрате.
С построением матрицы я разобрался (скорее всего, я делаю это правильно):
Я вывел формулы для поиска матрицы преобразования из квадрата в четырехугольник:
.
.
.
.
.
.
.
.
.
Получаю матрицу:
После этого, спасибо Хабраюзеру
@Mrrl, я нахожу обратную матрицу (методом Гаусса).
Далее, я пытаюсь получать координаты точки в квадрате имея координаты точки в четырехугольнике:
.
Но, получаю не верный ответ. Я подставляю совершенно разные точки, но получаю x и y 0,5.
Уверен точно, что алгоритм нахождения обратной матрицы работает правильно (Сверял результаты с онлайн сервисами).
В построении матрицы я тоже уверен, подставляя конкретный x1,y1,x2,y2,x3,y3,x4,y4 и решив систему получал одинаковые ответы на листике и в программе.
Где я ошибся? Что делаю не так?
Без свежего взгляда не обойтись.
Пример:
Дано:
A (CP[1]) {x=0 y=0 }
B (CP[2]) {x=1 y=0 }
C (CP[3]) {x=2 y=2 }
D (CP[4]) {x=0 y=1 }
Прямая матрица:
{0.66666666666666674, 0.00000000000000000, -0.33333333333333331}
{0.00000000000000000, 0.66666666666666663, -0.33333333333333337}
{0.00000000000000000, 0.00000000000000000, 1.0000000000000000}
Обратная матрица:
{1.4999999999999998, 0.00000000000000000, 0.49999999999999994}
{-0.00000000000000000, 1.5000000000000000, 0.50000000000000011}
{-0.00000000000000000, -0.00000000000000000, 1.0000000000000000}
Всем спасибо, все работало правильно.
Проблема была в обработке полученных данных.
Была опечатка при обращении к массиву, и брался Points[i+2] элемент, а нужно Points[i*2].
Мораль: Не нужно писать код ночью)