关于Core Graphics中基本仿射变换
来源:互联网 发布:联发科x10优化 编辑:程序博客网 时间:2024/06/07 03:09
最近刚好遇到了Core Graphics中的基本变换,一直都没搞明白,于是细细看了下。
先来看下CGAffineTransform这个基本结构体的定义:
struct CGAffineTransform { CGFloat a, b, c, d; CGFloat tx, ty;};
乍一看好像明白好像又不明白,额,那就是不明白啦~ 还好官方文档里有比较详细的解释。
In Quartz, affine transforms are represented by a 3 by 3 matrix:
a b 0
c d 0
tx ty 1
这就意味着在一个二维坐标系中任意一点(x,y)可以经过矩阵进行变换得到新的点(x’,y’),从而达到各种仿射变换的目的。
x'=ax+cy+txy'=bx+dy+ty
上面公式是完整版的,通过给a,b,c,d,tx,ty中某些值赋特定值可以达到一些基本变换的效果,而一些复杂的效果都可以通过拆分为基本变换的组合来实现。
1.CGAffineTransformMakeRotation –> 旋转变换
CGAffineTransform CGAffineTransformMakeRotation ( CGFloat angle )
cosa | sina | 0
-sina | cosa | 0
0 | 0 | 1
这里的tx=0,ty=0,a b c d也换成了只与角度a有关的三角函数。
旋转后的结果:
x’=xcosa-ysina
y’=xsina+ycosa
2.CGAffineTransformMakeScale –> 缩放变换
CGAffineTransform CGAffineTransformMakeScale ( CGFloat sx, CGFloat sy );
这里只有2个参数sx,sy
相应的矩阵为
sx | 0 | 0
0 | sy | 0
0 | 0 | 1
缩放后x’=x*sx;y’=y*sy,很好理解是将x和y分别乘上一个数
3.CGAffineTransformMakeTranslation –> 平移变换
CGAffineTransform CGAffineTransformMakeTranslation ( CGFloat tx, CGFloat ty );
这里也只有两个参数,如果不清楚还是挺搞不清分别代表什么含义,但是理解了矩阵变换之后就很明了。这里把a b c d 分别替换成了1 0 0 1
1 | 0 | 0
0 | 1 | 0
tx | ty | 1
平移过后:
x'=x+txy'=y+ty
一目了然是将点进行了平移。
其实知道了这个
x'=ax+cy+txy'=bx+dy+ty
才是关键,其他都是从其简化而来。
- 关于Core Graphics中基本仿射变换
- UIKit和Core Graphics绘图——绘制光泽,仿射变换与矩阵变换
- UIKit和Core Graphics绘图——绘制光泽,仿射变换与矩阵变换
- UIKit和Core Graphics绘图——绘制光泽,仿射变换与矩阵变换
- Core Graphics图形变换
- 关于仿射变换
- opencv中关于重映射和仿射变换
- 图像处理基本算法--仿射变换
- 基本图像变换:线性变换,仿射变换,投影变换
- 关于仿射变换和透视变换的终极解释
- 仿射变换&透视变换
- 几何变换 -- 仿射变换
- 【翻译】仿射变换
- 仿射变换
- 仿射变换
- 仿射变换
- 仿射变换
- 仿射变换
- ZOJ-3827-Information Entropy
- Java并发编程(一)线程定义、状态和属性
- HDU 2107 Founding of HDU(水~)
- Longest Consecutive Sequence
- HashMyFiles生成文件的SHA和MD5
- 关于Core Graphics中基本仿射变换
- 在Android library中不能使用switch-case语句访问资源ID的原因分析及解决方案
- ZOJ-3829-Known Notation
- 关于CCPlatform Macro.h中的宏定义
- My view on future ebusiness
- mysql 学习记录(三)--字段
- QT容器学习
- LeetCode(71) Simplify Path
- POJ 1222 EXTENDED LIGHTS OUT