CGAffineTransformMake(a,b,c,d,tx,ty) 矩阵运算原理

CGAffineTransformMake(a,b,c,d,tx,ty)

a d 缩放, b c 旋转, tx ty 位移

(x , y) -> (x' , y') 的公式

    x' = ax + cy + tx
    y' = bx + dy + ty

矩阵的基本知识:

1struct CGAffineTransform { 2 CGFloat a, b, c, d; 3 CGFloat tx, ty; 4};

CGAffineTransform CGAffineTransformMake(CGFloat a, CGFloat b, CGFloat c, CGFloat d, CGFloat tx, CGFloat ty);

为了把二维图形的变化统一在一个坐标系里,引入了齐次坐标的概念,即把一个图形用一个三维矩阵表示,其中第三列总是(0,0,1),用来作为坐标系的标准。所以所有的变化都由前两列完成。

以上参数在矩阵中的表示为:

运算原理:原坐标设为(X,Y,  1)

                          | a    b    0 |

    (X,Y,  1)   ⅹ   | c    d    0 |     =     (aX + cY + tx , bX + dY + ty , 1) ;

                          | tx    ty   1 |

通过矩阵运算后的坐标(aX + cY + tx, bX + dY + ty, 1) 我们对比一下可知:

一、设a=d=1, b=c=0

(aX + cY + tx ,  bX + dY + ty , 1) = (X  + tx , Y + ty , 1)

可见,这个时候,坐标是按照向量(tx,ty)进行平移,

也就是函数CGAffineTransform CGAffineMakeTranslation(CGFloat tx,CGFloat ty)的计算原理。

二、设b=c=tx=ty=0

(aX + cY + tx ,  bX + dY + ty , 1) = (aX , dY , 1)

可见,这个时候,坐标X按照a进行缩放,Y按照d进行缩放,a,d就是X,Y的比例系数,

也就是函数CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)的计算原理。

a对应于sx,d对应于sy。

三、设tx=ty=0,a=cosβ,b=sinβ,c=-sinβ,d=cosβ

(aX + cY + tx , bX + dY + ty , 1) = (Xcosβ - Ysinβ , Xsinβ + Ycosβ , 1)

可见,这个时候,β就是旋转的角度,逆时针为正,顺时针为负。

也就是函数CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle)的计算原理。

angle即β的弧度表示。

参考:

https://developer.apple.com/library/ios/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq\_affine/dq\_affine.html

http://justsee.iteye.com/blog/1969933

点赞
收藏

评论区

加载中...

相关推荐

Java:输出1~20000内的所有素数,按每行5个打印出来

publicclassSupublicstaticvoidmain(Stringargs)intx,y;intk0;for(x2;x<1000;x)//11000的素数从2开始booleanflagtrue;for(y2;y<x;y)if(x%y0)flagfalse;

C语言函数:用位运算交换的方法交换两个变量值

void inplace_swap(int x, int y){    y  x ^ y; //Step 1    x  x ^ y; //Step 2    y  x ^ y; //Step 3 }int main(){  

Python OpenCV实例:图像灰度拉伸

coding:utf8'''灰度拉伸定义:灰度拉伸,也称对比度拉伸,是一种简单的线性点运算。作用:扩展图像的直方图,使其充满整个灰度等级范围内公式:g(x,y)255/(BA)f(x,y)A,其中,Aminf(x,y),最小

3D数学

4D向量和4x4矩阵不过是对3D运算的一种方便的记忆而已。4D齐次空间4D向量有4个分量,前3个是标准的x,y和z分量,第4个是w,有时称作齐次坐标。为了理解标准3D坐标是怎样扩展到4D坐标的,让我们先看一下2D中的齐次坐标,它的形式为(x,y,w)。想象在3D中w1处的标准2D平面,实际的2D点(x,y)用齐次坐标表示为(x,

Julia

算术运算符算术运算符适用于所有的基本数值类型x,一元加法,就是x本身\x,一元减法,x的相反数xy,二元加法,做加法运算xy,二元减法,做减法运算x\y,乘法,做乘法运算x/y,除法,做除法运算x^y,乘方,x的y次幂x%y,取余,x除以y然后取余数,等价于

常用模块之

importdatetimeimporttimeprint(time.strftime('%y/%m/%d%X'))输出结果:18/06/0520:40:46print(time.strftime('%Y/%m/%d%X'))输出结果:2018/06/

CGAffineTransformMake(a,b,c,d,tx,ty) 矩阵运算原理 - HelloWorld