斜投影(二):神马叫线性变换?

10点多刚下班,下班的路上我才发现我真是被他们给绕晕了。

我原始的需求很简单,给定一个点(斜投影下的格子坐标),求它的视野(也要格子坐标)。这个人站在屏幕的正中心,但是屏幕的大小是平面直角坐标系的值啊,单位是像素。怎么办?我同事给我的算法是上文所写的,先把自己换成直角坐标,然后计算出屏幕边框的直角坐标值,然后换回去。

其实呢,一眼就可以看出这是一个线性变换,因为它的变换规则可以用矩阵表示出来啊。那么,假设这个人的平面直角坐标是X,屏幕上某一点的坐标是X+b。那么根据线性变换,就有A(X+b)=AX+Ab。换句话说,直接算出Ab就行了啊!比如,屏幕的宽高分别是w、h,坐标原点在屏幕中心,那么屏幕右下角的坐标就是\( \left(
\begin{array}{ccc}
\frac{w}{2} \\
\frac{h}{2} \\
\end{array}
\right) \),因为\( A=\left(
\begin{array}{ccc}
\frac{1}{2} & 1 \\
-\frac{1}{2} & 1 \\
\end{array}
\right) \),所以\(Ab = (\frac{w}{4}+\frac{h}{2},-\frac{w}{4}+\frac{h}{2}) \),把人物的当前的格子坐标加上这个值就得了呗。就这么简单,我今天居然还拿笔从7点算到10点还算错了,然后写了一篇日志洋洋得意的以为自己终于把问题解决了。

结论就是:工作就像开车,如果需要动脑子,千万不要疲劳驾驶。

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥