Transforms CTM, 转换矩阵

本文深入探讨Quartz转换实现的原理,通过CTM矩阵解释移动、旋转、缩放等功能,并展示如何通过直接修改CTM或创建AffineTransforms来实现这些效果。文章还详细介绍了CTM的数学行为以及与其他变换的合成效果。
Quartz转换实现的原理:Quartz把绘图分成两个部分,
用户空间,即和设备无关,
设备空间,
用户空间和设备空间中间存在一个转换矩阵 : CTM
本章实质是讲解CTM

Quartz提供的3大功能
移动,旋转,缩放

演示如下,首先加载一张图片
void CGContextDrawImage (    CGContextRef c,    CGRect rect,    CGImageRef image );

 
Transforms(未完) - happy dog - 又一个部落格
移动函数
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.));

Transforms(未完) - happy dog - 又一个部落格


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 Transform
CGAffineTransform 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的 举证
如下图

 
Transforms(待续) - happy dog - 又一个部落格
下面举例说明几个转换运算的数学实现
x y 是原先点的坐标
下面是从用户坐标转换到设备坐标的计算公式
Transforms(待续) - happy dog - 又一个部落格
Transforms(待续) - happy dog - 又一个部落格
下面是一个identity matrix,就是输入什么坐标,出来什么坐标,没有转换
Transforms(待续) - happy dog - 又一个部落格
最终的计算结果是 x=x,y=y,
Transforms(待续) - happy dog - 又一个部落格
可以用函数判断这个矩阵是不是一个 identity matrix
bool CGAffineTransformIsIdentity (    CGAffineTransform t );

 

 
移动矩阵

 
Transforms(待续) - happy dog - 又一个部落格

 
缩放矩阵
Transforms(待续) - happy dog - 又一个部落格
Transforms(待续) - happy dog - 又一个部落格
旋转矩阵
Transforms(待续) - happy dog - 又一个部落格
Transforms(待续) - happy dog - 又一个部落格
旋转加移动矩阵
Transforms(待续) - happy dog - 又一个部落格
Transforms(待续) - happy dog - 又一个部落格
参考:http://developer.apple.com/iphone/library/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_affine/dq_affine.html#//apple_ref/doc/uid/TP30001066-CH204-SW1

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值