前提:一个图在直角坐标系上的所有点,都是从原点(0, 0, 0)开始。
以二维为例,所有的矩阵变换,都可以表示成 x` = ax + by, y` = cx + dy. 这种表示方法的原理和背后的意义,见
缩放矩阵 的推导
如图所示,所谓缩放,即一个图上的所有点的x和y值,都乘以缩放系数S。缩放0.5,其实就是x值变成0.5x,y变成0.5y,写成
对比 x` = ax + by, y` = cx + dy. 可知 a = s,b = 0, c = s,d = 0. 可推出缩放矩阵的变换为
旋转矩阵 的推导
如图所示,点P绕着原点(0, 0)旋转θ
x` = c - d
y` = a + b
a = sinθ·x
b = cosθ·y
c = cosθ·x
d = -sinθ·y
x` = cosθ·x - sinθ·y
y` = sinθ·x + cosθ·y
对比 x` = ax + by, y` = cx + dy. 可得旋转矩阵为
平移矩阵 的推导
如图所示,所谓平移矩阵,即在x方向上移动了tx,在y方向上移动了ty
可是,由于平移矩阵并不能表示成 x` = ax + by, y` = cx + dy.的形式
于是我们在原来的维度上“强行”加多一维,用三维来表示二维
这样,原来的表示方法依然成立:
x` = ax + by + ez
y` = cx + dy + fy
z` = gx + hy + iz
那么在二维空间中,z值 是多少?
我们认为,对于一个点而言,z值是1;对于向量而言,z值是0,表示一个点没有产生相对位移。
好了,现在拿平移矩阵代入这个形式中,
x` = x + tx = ax + by + ez(z=1),可知 a = 1, b = 0, e = tx
y` = y + ty = y` = cx + dy + fz(z=1),可知 c = 0, d = 1, f = ty
z` = 1 = gx + hy + iz(z=1),可知 g = 0,h = 0, i = 1
从而得到平移矩阵的变换为
切变矩阵 的推导
如图所示,所谓切变矩阵,即一个图形上的某些点在x方向上发生了偏移,偏移的大小跟y有关,y越大偏移越大,即
x` = x + ?y
y` = y
再仔细分析,发现偏移值跟y的百分比有关,y为0时没有偏移也就是,在中间y=0.5c时偏移0.5b,在最高点y=1c时偏移1b,可知 x的偏移量等于y/b*c,即
x` = x + (b/c)y
这里有2个变量b和c,我们可以减少其中一个变量的影响,即把c归一化(b和c同时除以c),比如c是100,除以100等于1,那么b也除以100,把b/c看成a/1
注意:这里的a是红线等于1时的值,如果红线等于其他值n,要除以n才能得到a
标签:推导,缩放,变换,矩阵,cx,偏移,dy,ax 来源: https://www.cnblogs.com/alphaGo/p/16098834.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。