怎样理解iOS CGAffineTransform API 传参?
来源:互联网 发布:adobe air是什么软件 编辑:程序博客网 时间:2024/06/05 15:33
结论:
CGAffineTransformMake(a,b,c,d,tx,ty)
1、ad缩放;2、bc旋转;3、tx,ty位移。
基础的2D矩阵公式
x'=ax+cy+tx y'=bx+dy+ty
概要:
struct CGAffineTransform{
CGFloat a, b, c, d;
CGFloat tx, ty;
}
CGAffineTransform CGAffineTransformMake (CGFloat a,CGFloat b,CGFloat c,CGFloat d,CGFloat tx,CGFloat ty);
为了把二维图形的变化统一在一个坐标系里,引入了齐次坐标的概念,即把一个图形用一个三维矩阵表示,其中第三列总是(0,0,1),用来作为坐标系的标准。所以所有的变化都由前两列完成。
以上参数在矩阵中的表
|a b 0|
|c d 0|
|tx ty 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即ɵ的弧度表示。
(此篇主要帮助动画初学者理解CGAffineTransform,阅读前请先查阅齐次坐标系和矩阵相关知识。大神勿喷,不足之处还请指正!)
阅读全文
0 0
- 怎样理解iOS CGAffineTransform API 传参?
- iOS---CGAffineTransform
- IOS CGAffineTransform
- IOS CGAffineTransform
- IOS CGAffineTransform一些用法
- iOS CGAffineTransform属性
- iOS CGAffineTransform属性
- iOS CGAffineTransform属性
- iOS CGAffineTransform详解
- iOS CGAffineTransform属性
- iOS 官方文档 CGAffineTransform
- [IOS 开发] CGAffineTransform属性
- iOS CGAffineTransform属性
- iOS CGAffineTransform属性
- iOS形变之CGAffineTransform
- iOS CGAffineTransform简单应用
- iOS CGAffineTransform相关函数
- iOS CGAffineTransform 动画
- C++中的“不完全类型”
- 还原文件打开方式为未知应用程序
- javascript中值传递,地址传递,引用传递的问题(使用js创建list对象时会用到)
- 福尔摩斯的约会
- GAN的统一架构与WGAN
- 怎样理解iOS CGAffineTransform API 传参?
- php动态上传多文件
- Java中的参数传递
- 未找到路径“/favicon.ico”的控制器或该控制器未实现 IController
- 我有一只猫叫Tom
- 单例模式
- Maven+Spring+Spring MVC+MyBatis+MySQL,搭建SSM框架环境
- Mac 上 Class JavaLaunchHelper is implemented in both 报错
- SQL On Linux 初体验