用斜二測畫法畫直觀圖,本質上就是把三維空間中圖形的每個點投影到一個二維平面上(其實還需要先把 y 坐標除以 2, 但這不是重點)。投影之后坐標降到了二維,這樣才有可能在二維的紙面上把點每個點畫出來,從而把整個圖形畫出來。
(斜二測畫法,邊長 200px 的立方體)
當年學向量的時候推導了一些變換公式(當時還不知道矩陣乘法),順便研究了一下怎么樣通過計算畫直觀圖而不是憑感覺。亂搞了一通蒙出一組式子來,基本上可以確定是對的:
\(\left\{\begin{matrix}
x' = x+\frac{\sqrt{2}}{4}y \\
y' = z+\frac{\sqrt{2}}{4}y
\end{matrix}\right.\)
(x, y, z) 表示空間中點的坐標,(x', y') 表示投影后紙面上一個 x 軸向右,y 軸(對應空間中的 z 軸)向上的坐標系中點的坐標。在這個坐標系中,可以畫出 y = x 這條直線來表示空間中的 y 軸(圖中 z 軸)。注意這個 y 軸是指向右上方的,也就是說這是一個左手系(其實左手系跟右手系在坐標運算上幾乎沒什么差別,只是向量外積不一樣而已):
(左手系和右手系,圖片來自網絡)
上述式子只適用於左手系,但是稍加改造應該就能得到只適用於右手系的另一組式子。不過我懶得再推(試)了。
寫成變換矩陣的形式:
\(\begin{bmatrix}
x'\\
y'\\
z'
\end{bmatrix}=\begin{bmatrix}
1 & \frac{\sqrt{2}}{4} & 0 \\
0 & \frac{\sqrt{2}}{4} & 1 \\
0 & 0 & 0
\end{bmatrix}\begin{bmatrix}
x\\
y\\
z
\end{bmatrix}\)