以前都很討厭小畫家不能任意旋轉角度這點。
但是小畫家其實辦得到這個工作。
在開始之前,以下鉛直二字在程式中均翻譯為垂直。
這是有點爛的翻譯,比較像文學家誤解科學語言那種,所以一律改稱鉛直。
我們先準備一隻月光西羅摩。
月光西羅摩:「Pui pui pui pui pui、PUI PUI PUI!」
https://i.imgur.com/y46KMNB.png
然後我們用調整大小功能,設定水平77、鉛直129。
得到一隻有點苗條的月光西羅摩。
https://i.imgur.com/xekkRYE.png
再用隱藏在調整大小裡面的扭曲功能,設定水平39。
這是一隻被推歪了的苗條月光西羅摩。
https://i.imgur.com/K296dk6.png
這次不用另外設定,直接按下旋轉找到翻轉功能裡面的鉛直翻轉。
得到了歪歪苗條月光西羅摩倒影!
https://i.imgur.com/215IXKr.png
接下來再用扭曲功能,設定鉛直39。
這次西羅摩看起來很像地毯,我就叫他地毯月光西羅摩。
https://i.imgur.com/dVPFCbj.png
最後一步,再次使用調整大小功能,設定水平77、鉛直129。
西羅摩就被我們翻轉了!
https://i.imgur.com/iOGtQvE.png
看看那個小畫家的特色鋸齒邊緣的確互相垂直了,圖片大小也沒有跑掉太多,
我們成功使用小畫家的基本功能做了一次以 x=2y 為翻轉軸的翻轉。
誒,我沒有做旋轉?
那個簡單,再做一次鉛直翻轉。
我們得到了大概是旋轉37度的月光西羅摩。
https://i.imgur.com/FcY7Q52.png
事實上小畫家是一個線性代數教學軟體。
他教會了我們怎麼使用伸縮、推移、簡單鏡射達到一般的鏡射旋轉效果。
上面的作法其實稍微複雜了一點,把可逆方陣做 LDU 分解後,
L 是鉛直推移、U 是水平推移、D 則是可能含有鏡射或旋轉半周的伸縮。
不過剛剛嘗試計算了一下,想要對 y=x 鏡射似乎沒有那麼簡單,
即使用 LDU 效果也不佳,因為 LDU 依賴的高斯消去法要先換列,
可是列交換本身就是那個鏡射……
但只要先左轉 90 度接著再水平翻轉即可。
對 y=-x 的鏡射則要把前述步驟改成鉛直翻轉。
上面的作法複雜歸複雜,但是因為對稱性極佳,所以我還是選了這個。
以下θ代表鏡射軸的斜角。
其中水平伸縮倍率皆為√cos2θ,鉛直伸縮倍率則是其倒數,
推移角度則由 arctan(sin2θ) 算出。
遇到負的 cos2θ 時,可以將步驟中的鏡射改為水平鏡射。