Skip to content

Latest commit

 

History

History
79 lines (60 loc) · 2.38 KB

perspective-transform.md

File metadata and controls

79 lines (60 loc) · 2.38 KB

投影变换

空间中的点中心投影到平面

考虑空间坐标系的原点 $O$ 和不过原点的一个屏,这个屏上也有一个平面坐标系,基向量为 $\vec{i},\vec{j}$ ,原点的坐标为 $\vec{o}$ 。它们都是这个空间坐标系下的三维向量。

连接空间任意点 $\vec{p}=(x,y,z)$ 与原点,和平面有一个交点,那么这个交点就是该空间点关于原点 $O$ 在屏上的投影点。假设投影点在屏上坐标系的坐标为 $(x_1,y_1)$ ,可以写出如下关系:

$$ k(\vec{o}+x_1 \vec{i}+y_1 \vec{j})=\vec{p} $$

其中 $k$ 为某个实数。

这个式子很好理解:空间中的多个点可以对应同一个投影点(只要位于同一条投影线,即经过 $O$ 的直线上),而投影点的坐标可由 $x_1, y_1$ 表示: $\vec{o}+x_1 \vec{i}+y_1 \vec{j}$ 。显然对某个 $\vec{p}$ (如果不与屏平行),存在唯一的 $x_1, y_1$ 使得投影点和 $O$ 的连线与其共线,只相差比例 $k$

我们将上式改写成矩阵的形式:

$$ \left( \begin{matrix} \vec{i} & \vec{j} & \vec{o} \end{matrix} \right) \cdot k \cdot \left( \begin{matrix} x_1 \\ y_1 \\ 1 \end{matrix} \right) = \left( \begin{matrix} x \\ y \\ z \end{matrix} \right) $$

可以发现,中间的坐标就是齐次坐标的形式。

注意到 $\vec{i},\vec{j},\vec{o}$ 显然不会共面,因此构成了一个可逆矩阵。

记:

$$ M = \left( \begin{matrix} \vec{i} & \vec{j} & \vec{o} \end{matrix} \right) $$

则已知 $\vec{p}$ 的情况下,我们就很容易求出投影点在屏上坐标系的坐标了:

$$ \vec{p'} = \left( \begin{matrix} x_1k \\ y_1k \\ k \end{matrix} \right) = M^{-1}\vec{p} $$

求出右边后,将所得向量同除以第三个分量,前两个分量就是 $x_1, y_1$ 。当然,我们也可以用中间的三维的齐次坐标来表示这个二维的向量。在这种表示下,由于 $k$ 不固定,因此一个二维的点有无数种表示方法,它们之间只相差一个倍数。

两个投影面之间的坐标变换

利用上面的公式,我们就可以将三维空间中的点到某一个平面的坐标系上的齐次坐标映射用一个可逆矩阵表示。而一个点(非投影中心)投影到两个平面的坐标系上,这两个坐标系之间的转换关系同样是一个可逆矩阵。

$$ k_1M_1\vec{p_1'}=k_2M_2\vec{p_2'}=\vec{p} $$