Это дает вам два набора, каждый из трех уравнений в 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)).
...
На самом деле, это слишком упрощенно и принимает камера указала на происхождение вашей 3D системы и никакой перспективы координат.
Для перспективы, матрица преобразования работает больше как:
(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;
но матрица 4х3 более ограничена, чем 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 для масштабирования двумерных точек обзора, так как мы сможем устранить «центральные» координаты (xc, yc).
Итак, если у вас есть 4 точки и преобразуйте двумерные точки обзора относительно центра вашего дисплея, вы можете получить 14 одновременных уравнений в 13 переменных и решить.
К сожалению, шесть уравнений не являются линейными уравнениями. К счастью, все переменные в этих уравнениях ограничены значениями от -1 до 1, поэтому все еще возможно решить уравнения.
Это не моя домашняя работа! – 2008-09-25 00:38:46