转载请注明出处:http://fdream.net,作者:Fdream
由于仿射变换时,平行的边依然平行,所以,我们无法对一个矩形的位图进行随意变换,比如我们无法拉伸一个角,也无法进行把它变成梯形等。在上文中,我们提到过一种思路,就是把矩形分割成两个三角形,这样变换时从表面上看来就没有什么平行边了,这样我们就可以变换其中的一个或者多个角了。注意,我这里说的是从表面上看,这一点在后面的变换中要进行一定的处理的。
这样我们只需要对三个点进行平面变换,假设我们的三个点分别为(x1, y1)、(x2, y2)、(x3, y3),要变换的位置分别为(x1′,y1′)、(x2′, y2′)、(x3′, y3’)、现在,我们要做的就是计算其变换矩阵。假设其变换矩阵为:
注意,在Flash中,其对应的变换矩阵应该是这个(平移变换的位置略有不同):
根据上一篇文章中提到的,点(x1, y1)变换为(x1′, y1′)时,有:
于是可以得到方程:
- a*x1 + c * y1 + tx = x1′
- b*x1 + d * y1 + ty = y1′
同理,我们还可以得到其他四个方程:
- a*x2 + c * y2 + tx = x2′
- b*x2 + d * y2 + ty = y2′
- a*x3 + c * y3 + tx = x3′
- b*x3 + d * y3 + ty = y3′
正好六个方程,六个未知数:a、b、c、d、tx、ty,解这六个方程就可以得到我们的变换矩阵。方程的解为:
这几个结果看起来够晕的,本来还想化简一下的,懒了,还怕弄错,谁有兴趣看看还能不能再简化一下,这个结果应该是没有错的。解这个方程够晕的,这篇就到这里为止吧,这几个结果留着后面用,下一篇讲讲如何把一个位图切割成三角形。