Transforms CTM, 转换矩阵
来源:互联网 发布:小程序制作软件 编辑:程序博客网 时间:2024/06/06 02:28
原文地址 http://hi.baidu.com/aidfan/blog/item/61b0fe00d8f56909728b65bd.html
Quartz转换实现的原理:Quartz把绘图分成两个部分,
用户空间,即和设备无关,
设备空间,
用户空间和设备空间中间存在一个转换矩阵 : CTM
本章实质是讲解CTM
Quartz提供的3大功能
移动,旋转,缩放
演示如下,首先加载一张图片
void CGContextDrawImage (
CGContextRef c,
CGRect rect,
CGImageRef image
);
移动函数CGContextTranslateCTM (myContext, 100, 50);
旋转函数
include <math.h>static inline double radians (double degrees) {return degrees * M_PI/180;}
CGContextRotateCTM (myContext, radians(–45.));缩放CGContextScaleCTM (myContext, .5, .75);翻转, 两种转换合成后的效果,先把图片移动到右上角,然后旋转180度CGContextTranslateCTM (myContext, w,h);CGContextRotateCTM (myContext, radians(-180.));
组合几个动作
CGContextTranslateCTM (myContext, w/4, 0);CGContextScaleCTM (myContext, .25, .5);CGContextRotateCTM (myContext, radians ( 22.));
CGContextRotateCTM (myContext, radians ( 22.));CGContextScaleCTM (myContext, .25, .5);
CGContextTranslateCTM (myContext, w/4, 0);
上面是通过直接修改当前的ctm实现3大效果,下面是通过创建Affine Transforms,然后连接ctm实现同样的3种效果这样做的好处是可以重用这个Affine Transforms应用Affine Transforms 到ctm的函数void CGContextConcatCTM ( CGContextRef c, CGAffineTransform transform);Creating Affine Transforms移动效果CGAffineTransform CGAffineTransformMakeTranslation ( CGFloat tx, CGFloat ty);CGAffineTransform CGAffineTransformTranslate ( CGAffineTransform t, CGFloat tx, CGFloat ty);旋转效果CGAffineTransform CGAffineTransformMakeRotation ( CGFloat angle);CGAffineTransform CGAffineTransformRotate ( CGAffineTransform t, CGFloat angle);缩放效果CGAffineTransform CGAffineTransformMakeScale ( CGFloat sx, CGFloat sy);CGAffineTransform CGAffineTransformScale ( CGAffineTransform t, CGFloat sx, CGFloat sy);反转效果CGAffineTransform CGAffineTransformInvert ( CGAffineTransform t);只对局部产生效果CGRect CGRectApplyAffineTransform ( CGRect rect, CGAffineTransform t);判断两个AffineTrans是否相等bool CGAffineTransformEqualToTransform ( CGAffineTransform t1, CGAffineTransform t2);获得Affine TransformCGAffineTransform CGContextGetUserSpaceToDeviceSpaceTransform ( CGContextRef c);下面的函数只起到查看的效果,比如看一下这个用户空间的点,转换到设备空间去坐标是多少CGPoint CGContextConvertPointToDeviceSpace ( CGContextRef c, CGPoint point);CGPoint CGContextConvertPointToUserSpace ( CGContextRef c, CGPoint point);CGSize CGContextConvertSizeToDeviceSpace ( CGContextRef c, CGSize size);CGSize CGContextConvertSizeToUserSpace ( CGContextRef c, CGSize size);CGRect CGContextConvertRectToDeviceSpace ( CGContextRef c, CGRect rect);CGRect CGContextConvertRectToUserSpace ( CGContextRef c, CGRect rect);CTM真正的数学行为这个转换矩阵其实是一个 3x3的 举证
如下图下面举例说明几个转换运算的数学实现x y 是原先点的坐标下面是从用户坐标转换到设备坐标的计算公式下面是一个identity matrix,就是输入什么坐标,出来什么坐标,没有转换最终的计算结果是 x=x,y=y,可以用函数判断这个矩阵是不是一个 identity matrixbool CGAffineTransformIsIdentity ( CGAffineTransform t);移动矩阵缩放矩阵
旋转矩阵旋转加移动矩阵
- Transforms CTM, 转换矩阵
- Transforms CTM, 转换矩阵
- Transforms CTM 转换矩阵
- Transforms CTM, 转换矩阵
- Transforms CTM, 转换矩阵
- Transforms CTM, 转换矩阵
- Transforms CTM, 转换矩阵
- Transforms CTM, 转换矩阵
- Transforms CTM 转换矩阵
- Transforms CTM, 转换矩阵
- Quartz Transforms CTM, 转换矩阵
- transforms CTM,变换矩阵
- iphone开发——Transforms CTM, 转换矩阵
- 1.9. 坐标转换 Coordinate Transforms
- Transforms
- 关于TF转换信息(Transforms)的理解
- CTM(绘图)
- 矩阵转换
- 微软CEO鲍尔默:当年没能收购雅虎很走运
- Quartz 2D编程指南1-------Quartz 2D概述
- 李彦宏:90后未来会做得比我好
- Quartz 2D指南2---Graphics Contexts
- 黑客团体Anonymous宣称已经攻陷40家儿童色情网站
- Transforms CTM, 转换矩阵
- qt学习笔记(八)之深入QSqlQuery
- PHP学习笔记(2)--PHP数据库操作基本知识
- 弧度与角度的关系
- android签名
- Quartz 和 动画的关系 图形处理和动画 的关系
- iphone开发 Quratz 2D 学习 ---什么是 graphics context(图形上下文)
- JME商业游戏进阶一 (从图片开始)
- JIRA 4.4.1安装、汉化、破解 (linux)