原文:http://www.tuicool.com/articles/3IbQri

一. 三维坐标系

据说有一次笛卡尔生病了,躺在床上休息,但是他的大脑却没有休息,一只在寻思着通过什么手段把几何图形和代数方程关联起来,也就是几何图形中的每一个点怎么和方程的每一组解关联起来。这个时候他看到房顶上有一只蜘蛛在织网,蜘蛛空中爬来爬去。他想地上墙角的三面墙相交出三条线,把墙角作为原点,把这三条线作为数轴,那么蜘蛛某刻的位置可以通过这三条数轴上的数来表示,反过来,给定一组数便可以确定空间中的一点。后来笛卡尔发明了平面直角坐标系,当然上面的故事是三维空间的,只是为了说明,坐标系的作用是为了便于描述点的位置。(我们学过的除了平面直角坐标系这个二维坐标系外,还学过极坐标系,通过到原点的距离以及夹角角度来表示一个点。)

后人在笛卡尔的平面坐标系的基础上发明了三维坐标系,常用的三维坐标系分两种:左手坐标系和右手坐标系。当确定了x轴,y轴方向之后可以通过左手或右手来确定z轴的方向。下图则是左手坐标系和右手坐标系的规则示意图:

弯曲 拇指,食指和中指使它们两两相互垂直,拇指指向x轴正方向,食指指向y轴正方向,中指指向z轴正方向 。左手坐标系使用左手,右手坐标系使用右手。(上面示意图中的左手坐标系或者右手坐标系整体旋转后性质不变,比如左手坐标系旋转后,使得y轴正方向向下,x轴正方向保持向右,它依然是左手坐标系。)

另外还有一个左手或者右手定则来判断旋转的正方向,握住拳头,拇指指向旋转轴的正方向,四指弯曲的方向为旋转的正方向。左手坐标系使用左手来判定,右手坐标系使用右手来判定. 下图是右手的例子:

二. Mac,iOS界面中的坐标系

话说Mac,iOS中的各种坐标系总会让初学者摸不着头脑,一会儿这样一会儿那样。不过有一点是不变的,z轴的正方向总是指向观察者,也就是垂直屏幕平面向上。

1.NSView坐标系

在Mac中NSView的坐标系默认是右手坐标系(View其实是二维坐标系,但是为了方便我们可以假设其是三维坐标系,只是所有界面的变化都是在xy平面上),原点在左下角. NSView提供了一个可以用于覆盖的方法

-(BOOL)isFlipped;

此默认返回NO,当返回YES的时候,则坐标系变成左手坐标系,坐标原点变成左上角。

在Mac的AppKit中有很多界面组件本身就使用了Flipped Coordinate System(覆盖了上面的方法并返回YES),如NSButton,NSTableview,NSSplitView 更详细的看这里 其中Cocoa Use of Flipped Coordinates 这一节 https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaDrawingGuide/Transforms/Transforms.html

2.UIView坐标系

而在iOS的UIView中,则没有所谓的Flipped Coordinate的概念,统一使用左手坐标系,也就是坐标原点在左上角.

3.Quartz坐标系

Quartz(Core Graphics)坐标系使用的右手坐标系,原点在左下角,所以所有使用Core Graphics画图的坐标系都是右手坐标系,当使用CG的相关函数画图到UIView上的时候,需要注意CTM的Flip变换,要不然会出现界面上图形倒过来的现象。由于UIKit的提供的高层方法会自动处理CTM(比如UIImage的drawInRect方法),所以无需自己在CG的上下文中做处理。 参见 Quartz 2D Coordinate Systems

4.CALayer坐标系

这个有些变态了,其坐标系和平台有关,在Mac中CALayer使用的是右手坐标系,其原点在左下角;iOS中使用的左手坐标系,其原点在左上角。 参见 Layer Coordinate System

ios 图像坐标系_Mac,iOS界面中的三维坐标系相关推荐

  1. iOS界面中的三维坐标系

    右手坐标系,原点在左下角,即x正方向向右,y正方向向上,z正方向向前指向观察者. 左手坐标系,原点在左上角,即x正方向向右,y正方向向下,z正方向向前指向观察者. 二. Mac,iOS界面中的坐标系 ...

  2. Matplotlib画图教程:在QT界面中嵌入三维图片

    Matplotlib画图教程:在QT界面中嵌入三维图片 需求: 做项目报告的时候,有这么一个想法,就是能通过UI随时调用matplotlib进行二维图和三维图的绘制.因此就诞生了做这么一个小模块的想法 ...

  3. matlab三维 旋转矩阵,matlab中的三维坐标系与旋转

    1. matlab中的三维坐标系 matlab中的三维坐标系是使用的右手坐标系: 输入以下代码: >> plot3(0,0,0) >> xlabel('axis X') > ...

  4. matlab中如何转动三维图_matlab中的三维坐标系与旋转

    1. matlab中的三维坐标系 matlab中的三维坐标系是使用的右手坐标系: 输入以下代码: >> plot3(0,0,0) >> xlabel('axis X') > ...

  5. matlab怎么画三维坐标的二维图,excel怎么画二维坐标表格图(如何在excel中绘制三维坐标系?)...

    在excle中怎么把二维图形变成三维图形 你说的是图表吗,如果是的话就这样操作 excel2007以上版本:选中图表-点击设计选项卡-最左面有更改图表类型-选择合适的类型-确定 excel2003也是 ...

  6. matlab 三维y轴平面图,#如何在excel中绘制三维坐标系?#excel怎么画图平面坐标图...

    用excel绘制曲线图时如何进行坐标轴转换 点"插入"->"图表"->"XY图","子图表类型"选择&quo ...

  7. QT界面中实现视频帧显示的多种方法及应用

    QT界面中实现视频帧显示的多种方法及应用 (一) 引言 1.1 视频帧在QT界面中的应用场景 1.2 不同方法的性能和适用性分析 1.2.1 使用QLabel和QPixmap 1.2.2 使用QPai ...

  8. xyz三维坐标系怎么画?

    坐标系统是描述物质存在的空间位置(坐标)的参照系,通过定义特定基准及其参数形式来实现.通过课本上的介绍,我们知道坐标系分为平面坐标系和三维坐标系,平面坐标系是很好画的,一般都是直角坐标系,那么三维坐标 ...

  9. ios 图像坐标系_iOS中理解坐标系 - Megan_zhou的个人空间 - OSCHINA - 中文开源技术交流社区...

    坐标.点和像素之间的微妙转换也可能降低绘制性能,导致线条和文字模糊.观察以下代码: CGContextSetLineWidth(context, 3.); // 绘制从坐标{10, 100}到{200 ...

最新文章

  1. 2022-2028年中国刀具行业投资分析及前景预测报告
  2. 强化学习教程来啦!贡献者来自中科院、清华、北大3位男神!
  3. 于媛龄(201552118)第二次作业网调问卷的制作
  4. java任务分解_Spark如何将切片分解为任务/执行者/工作者?
  5. php 利用scandir() 函数 扫描出制定目录下的所有文件
  6. 微信小程序入门五: wxml文件引用、模版、生命周期
  7. C语言typedef关键字—伟大的缝纫师
  8. c语言 三个小球排排坐,关颖三个孩子排排坐 太萌啦
  9. “鸡肋”的百度,掉队了 BAT? | 畅言
  10. it技术交流平台_IT协会向你招手了,不了解了解?
  11. 私活后的 WPF 设计经验总结
  12. 一句代码搞定权限请求,从未如此简单
  13. 云南昭通暴雨强度公式_玉溪市中心城区暴雨强度公式(修订)
  14. 华为数据之道学习分享
  15. Kali-Linux windows 双系统的安装
  16. 2021年中国国内生产总值(GDP)、GDP结构及人均国内生产总值分析[图]
  17. java你的线上欧美_JAVA 线上故障排查全套路
  18. 用扫码枪收款钱到哪里_为何微信设置了密码,超市也能用扫码枪能将钱扫走?真要注意...
  19. 计算机软件考试成绩查询时间,2020年计算机软考什么时候出成绩,怎么查成绩?|...
  20. 吉布斯采样(Gibbs Sampling)及相关算法

热门文章

  1. linux查看输出的信息,linux查看java的输出信息
  2. 【MySQL】MySQL复制之GTID复制
  3. 云原生 | Kubernetes - k8s集群搭建(kubeadm)(持续收录报错中)
  4. mysql中 视图的优缺点,详细讲解MYSQL视图的作用及优缺点
  5. 单片机c语言孔雀开屏,单片机C语言案例步骤教学指南.doc
  6. linux命令打错怎么办,技术|命令行乐趣:嘲讽输错 Bash 命令的用户
  7. 处理数据库模糊查询%,_问题(JAVA)
  8. 算法学习(10):LeetCode刷题之Dijkstra最短路径算法
  9. 阿里云的安全性怎么样?
  10. docker配置defects4j + SimFix