Ответы пользователя по тегу Геометрия
  • Как построить матрицу проективного преобразования без сторонних библиотек?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Проще всего сначала построить матрицу преобразования из квадрата в 4-угольник, а потом взять обратную.
    Точки плоскости будем записывать, как принято в компьютерной графике, как строки: (x y 1) для собственной точки и (x y 0) для несобственной. Строка (c* c*y c) обозначает ту же точку, что и (x y 1) (при с!=0).
    Пусть матрица преобразования M=((a11 a12 a13) (a21 a22 a23) (a31 a32 a33)). Точка (u,v) квадрата переходит в точку (x,y) четырёхугольника, если для некоторого с!=0 выполняется
    (u v 1)*M=(c*x c*y c).
    Сначала возьмём вершину (0,0). Получим
    a31=c1*x1, a32=c1*y1, a33=c1. Видно, что мы можем взять a33=c1=1 (матрица тоже определена с точностью до пропорциональности), и у нас есть последняя строчка:
    a31=x1, a32=y1, a33=1.
    Теперь подставим остальные вершины. Получим 9 уравнений:
    a11+x1=c2*x2
    a12+y1=c2*y2
    a13+1=c2
    a11+a21+x1=c3*x3
    a12+a22+y1=c3*y3
    a13+a23+1=c3
    a21+x1=c4*x4
    a22+y1=c4*y4
    a23+1=c4
    Это квадратная система из 9 линейных уравнений. Её легко решить методом Гаусса. А можно вручную исключить все переменные, кроме c2,c3,c4, получить систему из 3 уравнений, решить каким-нибудь методом Крамера (через определители) и восстановить a11,a12,...,a23.
    Потом уже посчитать матрицу, обратную к построенной. Можно тоже через определители.
    Ответ написан