IOS中二维坐标变换

三相二相坐标变换 坐标变换 目录 坐标变换 ABC-ab变换 ABC->ab变换 ab->ABC变换 ab-dq变换 ab-dq变换 dq-ab变换 通过三相二相坐标变化,把三相交流量简化为二个直流量,从二个直流量出发可以控制三相交流量的各个属性。旋转坐标系,相对于静止坐标系,它会以三相交流频率转动。   ABC-ab变换 ABC->ab变换 方式一几何关系 I... 阅读详情

http://www.cnblogs.com/delonchen/archive/2011/08/03/iostransform.html

1.坐标变换的数学基础

      1.1 坐标系

          数学中我们使用的是笛卡儿坐标系,如下图所示:                    

                 

            X轴正方向向右,Y轴正方向向上,原点O,坐标点A(x,y)。

         1.2 仿射变换

             已知坐标点A,变换后新坐标系中坐标为B ,则有:

                                               B = AM

                  A为1*3的矩阵[x,y,1]

                  B为 1* 3的矩阵[x’,y’,1]

                  M为3*3仿射矩阵

                             

                  所以AM=B可以写成:

                            

                 展开后得到:   

                                  

                 以下是常用的变换矩阵:

                     单位矩阵:

                               

                      展开后得:

                              

                      平移矩阵:          

                              

                     展开后得: 

                              

                     缩放矩阵:

                             

                    展开后得:

                             

                            旋转矩阵:

                            

                   展开后得:       

                                                                                                                                                                    

      1.3 坐标变换类型

           模型变换: 坐标系固定不动,变换坐标系中的模型

           坐标轴变换:坐标系中模型固定不动, 变换坐标系,相对于新坐标系构造的变换矩阵和模型变换矩阵是一样的          

          

          如上图所示,A为原坐标系C中坐标,A'为新坐标系中C'坐标,在模型变换中新坐标系和原坐标系重叠在一起    

          二种变换方式A->A'变换矩阵都是相同的.     

2. IOS中坐标系

       2.1 IOS中包含UIKit坐标系(X轴正方向向右,Y轴正方向向下)和标准的Quartz 2D绘图坐标系(X轴正方向向右,Y轴正方向向上)

            使用相关API时要仔细阅读文档,弄清坐标系类型,原点位置等.

      2.2 例子分析

            2.2.1把中心点为A(50,50)长为20,宽为10的矩形以X轴逆时针旋转45度

 - (void)drawRect:(CGRect)rect{
      /**
       * UIKit坐标系,原点在UIView左上角
       */
      CGContextRef context =  UIGraphicsGetCurrentContext();
      CGContextSaveGState(context);
      CGAffineTransform transform;

      /**
       * 变换后 transform = CBA,显然不是想要的结果.
       * 这是由于CGAffineTransform变换函数构造的矩阵在左边,如:
       * t' = CGAffineTransformTranslate(t,tx,ty)
       * 结果为:t' = [ 1 0 0 1 tx ty ] * t
       * 累积变换就会得到上面的结果
       */
      transform = CGAffineTransformIdentity;
      transform = CGAffineTransformTranslate(transform, -50, -50); //A
      transform = CGAffineTransformRotate(transform, M_PI_4);      //B
      transform = CGAffineTransformTranslate(transform, 50, 50);   //C


      /**
       * 为了得到正确结果,调整顺序如下:
       */
      transform = CGAffineTransformIdentity;
      transform = CGAffineTransformTranslate(transform, 50, 50);    //C
      transform = CGAffineTransformRotate(transform, M_PI_4);       //B
      transform = CGAffineTransformTranslate(transform, -50, -50);  //A

   
      /**
       * context函数变换
       */
      //CGContextTranslateCTM(context, 50, 50);    //C
      //CGContextRotateCTM(context, M_PI_4);       //B
      //CGContextTranslateCTM(context, -50, -50);  //A

      CGContextConcatCTM(context, transform);

      /**
       * 绘制矩形
       */
      CGContextFillRect(context, CGRectMake(40, 45, 20, 10));

      CGContextRestoreGState(context);
  }


              

   2.2.2 绘制图片,下面函数在工作线程里面很有用

 void drawImage(CGContextRef context, CGImageRef image , CGRect rect){
      /**
       * 注意变换顺序A->B->C->D
       */
      CGContextSaveGState(context);

      /**
       * 矩形回到起始位置
       */
      CGContextTranslateCTM(context, rect.origin.x, rect.origin.y);  //D

      /**
       * 矩形Y轴正方向平移rect.size.height
       */
      CGContextTranslateCTM(context, 0, rect.size.height);           //C

      /**
       * 垂直反转矩形
       */
      CGContextScaleCTM(context, 1.0, -1.0);                         //B

      /**
       * 矩形平移到原点
       */
      CGContextTranslateCTM(context, -rect.origin.x, -rect.origin.y);//A

      /**
       * 绘制图片
       */
      CGContextDrawImage(context, rect, image);

      CGContextRestoreGState(context);
  }


       2.2.3 坐标轴变换

/**
 * 原坐标系为Quartz 2D,目标坐标系为UKit,用原坐标系中坐标绘图
 */
- (void)drawRect:(CGRect)rect
{
    //UKit坐标系
    CGContextRef context =  UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);
    CGRect bounds = self.bounds;
    
    /**
     * 坐标轴变换A->B
     */
    
    /**
     * 平移坐标轴
     */
    CGContextTranslateCTM(context, 0, bounds.size.height); // B
    
    /**
     * 翻转Y坐标轴
     */
    CGContextScaleCTM(context, 1, -1);                     //A
    
    /**
     * 绘制矩形
     */
    CGContextFillRect(context, CGRectMake(10, 10, 20, 20));
    
    CGContextRestoreGState(context);
}


基于FPGA的cy7c68013a双向通信实验 基于FPGA的cy7c68013a双向通信实验     本实验是基于FPGA的cy7c68013a的USB双向通信实验,以前折腾过一段时间cy7c68013a,没有入门时感觉好难,入门了就会感觉很简单。本教程主要内容:     1.cy7c68013a的固件编写,以及生成iic固件和下载固件。     2.cy7c68013a的slave模式,以及他的读写时序     3.cy7c6801... 阅读详情

相关推荐

保姆级避坑指南:在Ubuntu 18.04上搞定速腾Helios雷达驱动与fast-LIO2的完整配置流程

本文提供了一份详细的速腾Helios雷达与fast-LIO2在Ubuntu 18.04上的配置避坑指南,涵盖驱动安装、数据格式转换到建图全流程。特别针对常见编译错误和数据转换问题提供了解决方案,帮助开发者高效完成环境搭建与建图任务。

weixin_27252001的博客 113

iOS 坐标变换

iOS 坐标变换 在iOS中,Quartz 2D提供了坐标变换支持。   一、特殊的坐标变换(平移、缩放、旋转)   1. - void CGContextTranslateCTM ( CGContextRef c, CGFloat tx, CGFloat ty ):平移坐标系统。 该方法相当于把原来位于 (0, 0) 位置的坐标原点平移到 (tx, ty) 点。在平移后的坐标

于海明的博客 2240

酒店前台pms管理系统

对于酒店经营者来说,选择一款优秀的管理系统,是提升运营效率、优化客人体验的关键。PMS酒店管理系统凭借其强大的房态管理、实时数据监控、OTA直联、无人值守等功能,已经成为许多酒店提升管理水平的得力助手。无论是大中型酒店,还是小型民宿,PMS系统都能根据不同需求提供量身定制的解决方案,帮助酒店实现精细化管理、提高运营效率。如果你也在为酒店管理中的繁琐琐事而困扰,不妨尝试一下PMS酒店管理系统,感受科技带来的便利与高效,让你的酒店运营更上一层楼!

2409_89897808的博客 2483

iOS_convert point or rect 坐标和布局转换+判断

from: 从哪个坐标系 to: 到哪个坐标系。

mikimo的博客 1082

路径搜索算法——RRT*算法

RRT算法是RRT算法的优化版本,通过引入路径优化机制实现渐进最优性。该算法在高维空间和复杂环境中表现优异,主要步骤包括随机采样、树扩展和邻近节点重新连接。相比RRT,RRT能够不断优化路径质量,但计算复杂度更高。Python实现展示了其核心逻辑:随机采样扩展树节点,检查碰撞,选择最优父节点,并通过重新连接优化路径。算法适用于机器人导航等场景,但需平衡计算效率与路径质量。

swaggytiger的博客 3061

2023,程序员的出路在哪里?

可是似乎从30岁开始这工资就没涨过,前面跳槽几次涨的薪水在30岁以后跳槽已经不管用了、定格了,这几年由于市场环境不景气,程序员竞争越来越激烈,36岁跟30拿的工资一模一样,不仅工资拿的一样,反而事情还越来越多了,这些都意味着什么?处理故障需要的通常不仅仅是写代码的能力,还需要对一个系统的全貌要有一定的掌握。虽然目前不少大型互联网企业都在进行结构性调整,但是从互联网行业发展的基本面来看,未来在产业互联网发展的过程中,IT行业和传统行业将会释放出大量的就业岗位,所以未来程序员的发展空间还是非常值得期待的。

AI天才研究院 20万+

ios坐标系的转换方法解析

- (CGPoint)convertPoint:(CGPoint)point toView:(nullable UIView *)view; - (CGPoint)convertPoint:(CGPoint)point fromView:(nullable UIView *)view; - (CGRect)convertRect:(CGRect)rect toView:(nullable UIView *)view; - (CGRect)convertRect:(CGRect)rect fromVie

小马哥好棒哦 1003

R语言机器学习算法实战系列(十三)随机森林生存分析构建预后模型 (Random Survival Forest)

本教程运用随机森林生存分析筛选与患者生存状态显著相关特征。该方法借随机森林这一强大机器学习算法,构建多棵决策树并集成结果,以提高生存分析准确性,识别关键生物标志物。接着,利用选定特征构建风险得分,将多个特征转化为单一数值,量化患者风险水平。之后,依据风险得分将患者分为高、低风险亚型,为临床治疗提供个性化指导。最后,通过分析时间依赖的 ROC 曲线评估模型长期预测能力。此曲线计算不同阈值下的真正例率与假正例率,在多个时间点评估,全面展现模型长期稳定性与准确性。

专注生信领域 2022

ios 判断手机角度_ios – 从2个位置获取角度

这个其他答案有帮助吗?我写的是这样的:- (CGFloat) pointPairToBearingDegrees:(CGPoint)startingPoint secondPoint:(CGPoint) endingPoint{CGPoint originPoint = CGPointMake(endingPoint.x - startingPoint.x,endingPoint.y - star...

weixin_39979948的博客 184

MATLAB代码实现了一个柱塞泵配流盘过流面积的计算和可视化功能

该MATLAB代码实现了一个柱塞泵配流盘过流面积的计算和可视化功能。输出曲线可直接用于验证设计的合理性(如是否存在过流面积突变或不足)。的不同范围,选择对应的几何模型计算过流面积。通过分段逻辑计算柱塞腔在不同旋转角度(过流面积在特定条件下会被限制(如。),确保结果符合物理实际。条件分支,根据旋转角度。

huanghm88的专栏 582

手把手教你在飞牛 NAS 上部署自有图床,含Python调用接口

📸 想在飞牛 NAS 上部署图床?这篇教程超适合小白!从安装到使用,步骤清晰~

XiaoqiangClub的博客 2345

ios坐标变换

1.坐标变换的数学基础       1.1 坐标系           数学中我们使用的是笛卡儿坐标系,如下图所示:                                                   X轴正方向向右,Y轴正方向向上,原点O,坐标点A(x,y)。          1.2 仿射变换              已知坐标点A,变换后新坐标系中坐标为B ,则有

xumengying1的专栏 817

机器人控制仿真软件:MATLAB Simulink Control System Toolbox_(1).MATLAB基础知识

MATLAB(Matrix Laboratory)是由MathWorks公司开发的一种高性能数值计算和可视化软件。它广泛应用于科学计算、工程设计、信号处理、控制系统设计、图像处理等领域。强大的矩阵运算能力:MATLAB的核心是矩阵运算,能够高效处理大规模的数值数据。丰富的工具箱:MATLAB提供了大量的工具箱,如Control System Toolbox、Simulink、Signal Processing Toolbox等,这些工具箱覆盖了多个应用领域。易于使用的图形界面。

kkchenjj的博客 905

iOS--坐标变换Quartz 2D中的CGContextTranslateCTM、CGContextScaleCTM、CGContextRotateCTM、CGContextConcatCTM等

在iOS中,Quartz 2D提供了坐标变换支持 CGContextTranslateCTM、CGContextScaleCTM、CGContextRotateCTM、CGContextConcatCTM进行坐标变换、CGAffineTransformMake获得变换矩阵

gaussli的专栏 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

iOS--坐标变换Quartz 2D中的CGContextTranslateCTM、CGContextScaleCTM、

转自http://www.aichengxu.com/view/46588

baidu_29820889的博客 575

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

iOS开发 : 坐标变换Quartz 2D中的CGContextTranslateCTM、CGContextScaleCTM

iOS--坐标变换Quartz 2D中的CGContextTranslateCTM、CGContextScaleCTM、,有需要的朋友可以参考下。 iOS讲义总结 在iOS中,Quartz 2D提供了坐标变换支持。 一、特殊的坐标变换(平移、缩放、旋转) 1. - void CGContextTranslateCTM ( CGContextRef c, CGFl

tiebanshao的博客 574

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

电机控制——坐标变换

本文记录了近期学习坐标变换的一些心得体会和对坐标变换的理解,希望对大家有帮助

m0_47323029的博客 1345

坐标变换Quartz 2D

http://www.aichengxu.com/view/46588    转载地址 iOS--坐标变换Quartz 2D中的CGContextTranslateCTM、CGContextScaleCTM、,有需要的朋友可以参考下。 iOS讲义总结 在iOS中,Quartz 2D提供了坐标变换支持。 一、特殊的坐标变换(平移、缩放、旋转) 1. - void

ios_xhb的专栏 809

ios 图像坐标系_IOS图像处理(4)坐标变化

在IOS中进行绘图都是根据点来确定位置,这里就有了坐标系的概念在Core Graphics中坐标系的坐标原点在屏幕左下角,沿y轴正方向是向上的,而在UIKit中坐标原点在屏幕左上角,沿y轴正方向向下。我们可以通过一个3行3列的变换矩阵对2维坐标系进行任意转换(或者通过更加简便的API),常用的转换包括移动(translate),缩放(scale)以及旋转(rotate)。1 移动- (void)d...

weixin_39732316的博客 378

iOS中的坐标系和矩阵变换(转一)

最近在学Quartz 2d,这篇写的很基础,非常好,我转过来,并且copy 过来,拜读! http://www.cnblogs.com/delonchen/archive/2011/08/03/iostransform.html 1.坐标变换的数学基础       1.1 坐标系           数学中我们使用的是笛卡儿坐标系,如下图所示:

delphi090902的专栏 4131

iOS的绘图机制

嘿!我又回来了。(如果觉得喜欢,请关注这个微薄:http://weibo.com/javaplatform,很有用!哪里有更多的内容和资讯) 在前面我介绍了iOS的视图机制,我也提到了iOS的视图框框可以通过drawRect自己绘图,我也说过每个view的layer(CALayer)就像一个视图的投影,其实我们也可以来操作它定制一个视图,例如半透明圆角背景的视图。 要完成自己在视图上绘图,大家

tianyu的专栏 - Linux site:blog.youkuaiyun.com/wishfly 6901
上一篇: Quartz 2D与CTM
下一篇: iOS6 内存管理及闪退解决方案
向晨宇
博客等级 码龄15年 294粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值