Это дает вам два набора, каждое из трех уравнений в 3 переменных:
a*x0+b*y0+c*z0 = x0'
a*x1+b*y1+c*z1 = x1'
a*x2+b*y2+c*z2 = x2'
d*x0+e*y0+f*z0 = y0'
d*x1+e*y1+f*z1 = y1'
d*x2+e*y2+f*z2 = y2'
Просто используйте любой метод решения одновременных уравнений, который проще всего в вашей ситуации (даже не трудно решить их «вручную»). Тогда ваша матрица преобразования просто ((a, b, c) (d, e, f)).
...
На самом деле, это слишком упрощенно и предполагает, что камера направлена на начало вашей трехмерной системы координат и не имеет перспективы.
Для перспективы матрица преобразования работает более похоже на:
( a, b, c, d ) ( xt )
( x, y, z, 1 ) ( e, f, g, h ) = ( yt )
( i, j, k, l ) ( zt )
( xv, yv ) = ( xc+s*xt/zt, yc+s*yt/zt ) if md < zt;
но матрица 4x3 более ограничена, чем 12 степеней свободы, так как мы должны иметь
a*a+b*b+c*c = e*e+f*f+g*g = i*i+j*j+k*k = 1
a*a+e*e+i*i = b*b+f*f+j*j = c*c+g*g+k*k = 1
Таким образом, у вас, вероятно, должно быть 4 точки, чтобы получить 8 уравнений для покрытия 6 переменных для положения и угла камеры и еще 1 для масштабирования двумерных точек обзора, поскольку мы сможем устранить "центральные" координаты ( хс, ус).
Таким образом, если у вас есть 4 точки и вы трансформируете свои 2-D точки обзора относительно центра вашего дисплея, то вы можете получить 14 одновременных уравнений по 13 переменным и решить.
К сожалению, шесть уравнений не являются линейными уравнениями. К счастью, все переменные в этих уравнениях ограничены значениями от -1 до 1, поэтому, вероятно, все еще возможно решить уравнения.