简单整理了 SD里使用的数学算法。
比起深入理解,大概理解成是用这种数学形态做出的工具会事更好的学习方向。

理解 Transform2D Node 的行列。 利用 2X2 旋转行列进行 2D 旋转和尺寸的变更
线性变化(Linear transformation)
两个vector空间之间的变换 f和任意常数 c, 两个vector α, β满足以下条件的话, f就是线性变换。
f(α+β)=f(α)+f(β)
f(cα)=cf(α)
先看下 SD 的 Transformation 2D 的 inspector 。

标记的是 Transform matrix ,包含旋转和拉伸(大小,变皱,对称) 。
点一下 Matrix 键。

可以看到显示的是 2X2 行列式。
通常使用 matrix 的时候不会依赖于特殊计算,优点是可以快速处理。
但是也有缺点,旋转图片的时候像素间就不能做 Interpolation 。
这种现象在 0度 , 90度 , 180度等对称型的时候没有大问题,但是非对称的其他角度会有该问题。
通常图片在 Resizing 的时候会 dithered pixel sampling 所以做高分辨率贴图的时候不是很明显。
满足线性变换的具有代表性的变换就是旋转,放大、变皱、对称、投影也属于这部分。
不管是先旋转θ然后再旋转 ω,还是先旋转 ω再旋转 θ, 结果如果是 (θ+ω)的话,就可以知道旋转是线性变换。
移动不是线性变换。所以为了用一个行列表现变换, 会使用利用齐次坐标(Homogeneous coordinates)的仿射变换(Affine transformation)。
现在就可以推算出, SD 提供的 Transformation 2D 的旋转和大小变更(Scale)是使用 2X2 transform matrix ,Offset 是使用仿射变换(Affine transformation)。
反推
先把基底vector (1,0)(1,0)和 (0,1)(0,1)旋转θ。

如图片所示,把 (1,0)旋转 θ 就是(cosθ,sinθ) 然后把 (0,1)旋转 θ就是 (−sinθ,cosθ)。

然后旋转行列 R是线性变换,所以以下是成立的。

这里 R(1,0)和 R(0,1)就是 (cosθ,sinθ), (−sinθ,cosθ)所以代入后反推就结束了。

相应 0 度的旋转行列是单位矩阵(Identity matrix)。
2X2 旋转行列在除了 0度和 180度外的其他角度里,因为固有值和固有vector会因为非对称性表现成复数的形态。