绘制图表可能会有所帮助。您可以通过忽略将所有内容置于 2D 中的 x 坐标来使事情变得更简单。在这个更简单的图中,要找到点 t 在平面 PP 上的投影,只需从针孔的位置到该点画一条线。这使得从图中可以很容易地计算出每个点应该投影到的位置。您可以使用它来检查矩阵的计算。
你有一半的答案,如果我们在原点有一个针孔并且平面距离 3Zp 远,那么矩阵将是
( 1 0 0 0 )
M = ( 0 1 0 0 )
( 0 0 1/3Zp 0 )
这仅在针孔位于原点时才有效。在 a) 部分,它不是。
您需要做的是应用翻译。如果 a) 翻译所有内容以使 COP2 位于原点,则应用投影,然后应用翻译的倒数。如果我们在 M 中添加第四行,事情会变得更容易
( 1 0 0 0 )
M = ( 0 1 0 0 )
( 0 0 1 0 )
( 0 0 1/3Zp 0 ) Note modified form.
距离 d 沿 z 轴的平移由
给出
( 1 0 0 0 )
T = ( 0 1 0 0 )
( 0 0 1 d )
( 0 0 0 1 )
相反的就是
( 1 0 0 0 )
T'= ( 0 1 0 0 )
( 0 0 1 -d )
( 0 0 0 1 )
为了得到你的最终投影矩阵找到
T' M T.
最后,我们通过删除第三个坐标从 4D (x,y,z,w) 到 3D (x,y,w)。您可以通过乘以 3X4 矩阵来做到这一点。
请参阅Transformation matrix section perspective projection,了解透视投影的正确形式。
为了让事情更明确,让 a=Zp。翻译是
( 1 0 0 0 )
T = ( 0 1 0 0 )
( 0 0 1 -2 a )
( 0 0 0 1 )
从原点到平面 3Zp 的投影是
( 1 0 0 0 )
M = ( 0 1 0 0 )
( 0 0 1 0 )
( 0 0 -1/(3a) 0 )
找到原来是的 T' M T
( 1 0 0 0 )
N = ( 0 1 0 0 )
( 0 0 1/3 -2/3 a )
( 0 0 -1/(3a) 2/3 )
我们适用于我们的两点
( 0 ) ( 0 ) ( 0 )
N ( Yp ) = ( Yp ) -> ( Yp )
( -a ) ( -a ) ( -a )
( 1 ) ( 1 )
( 0 ) ( 0 ) ( 0 )
N ( Yp ) = ( Yp ) -> ( 3/4 Yp )
( -2a ) ( -4/3 a ) ( -a )
( 1 ) ( 4/3 )
最后一步是除以 w,所以我们有 (x,y,z) 坐标位于平面 z=-a=-Zp 上。这些与我们从图中得到的一致。如果你愿意,你可以去掉 N 的第 3 行。