这会给你两组每组三个三元方程:
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
为了覆盖相机位置、角度和 2-D 视图点的缩放这 6 个变量,你需要有 4 个点来获得 8 个方程。再加上一个用于消除“中心”坐标 (xc, yc)。
如果你有 4 个点,并将 2-D 视图点转换为相对于显示屏中心的坐标系,则可以得到 14 个关于 13 个变量的方程组,并进行求解。
不幸的是,其中六个方程不是线性方程。但幸运的是,这些方程中的所有变量都被限制在 -1 到 1 的值之间,因此解方程仍然可能是可行的。