孙鑫VC学习笔记:第十一讲 坐标空间与各种转换的概念

介绍一下坐标空间、逻辑空间、映射方式等概念

MicroSoft Windows 下的程序运用坐标空间和转换来对图形输出进行缩放,平移,旋转,斜切和反射。
一个坐标空间是一个二维空间,通过使用连个相互垂直并且长度相等的轴来定义二维对象

坐标空间
API使用四种坐标空间:世界坐标系空间,页面空间,设备空间,和物理设备空间。基于Win32的应用程序运用世界坐标系空间对图形输出进行旋转、斜切或者反射。

Win32 API把世界坐标系空间和页面空间称为逻辑空间;最后一种坐标空间(即物理设备空间)通常指应用程序窗口的客户区;但是他也包括整个桌面、完整的窗口(包括框架、标题栏和菜单栏)或打印机的一页或绘图仪的一页纸。物理设备的尺寸随显示器、打印机、绘图仪的所设置的尺寸而改变。

转换
如果要在一个物理设备上绘制输出,Windows把一个矩形区域从一个坐标空间拷贝到(或映射到)另一个坐标空间,直至最终完整的输出呈现在物理设备上(通常是屏幕或打印机)

如果该应用程序调用了SetWorldTransForm函数,那么映射就从应用程序的世界坐标系空间开始;否则,映射在页面空间中进行。在Windows把矩形区域的每一点从一个空间拷贝到另一个空间时,他采用一种被称作转换的算法,转换是把对象从一个坐标空间拷贝到另一个坐标空间时改变(或转变)这一对象的大小,方位,和形态,尽管转换把对象看成一个整体,但他也作用与对象的每一个点或每一条线。

---------------------------------------------------------------------------------
页面空间到设备空间的转换
页面空见到设备空间的转换是原Windows程序接口的一部分。这种转换确定与一特定设备描述表相关的所有图形输出的映射方式。
所谓映射方式是指确定用于绘图操作的单位大小的一种量度转换,映射方式是一种影响几乎任何客户区绘图的设备环境属性。另外还有四种设备环境属性:窗口原点,视口原点,窗口范围和视口范围,这四种属性与映射关系密切相关。

页面空间到设备空间的转换所用的是两个矩形的宽与高的比率,其中页面空间中的矩形被称为窗口,设备空间中的矩形被称为视口。Windows把窗口原点映射到视口原点,把窗口范围映射到视口范围,就完成了这种转换。

---------------------------------------------------------------------------------
设备空间到物理空间的转换
设备空间到物理空间的转换:只限于平移,并由Windows窗口管理部分控制,这种转换的唯一用途是确保设备空间的原点被映射到物理设备上的适当点上。没有函数能设置这种转换,也没有函数能获取有关数据。
所以通常我们所要考虑的是从页面空间到设备空间的转换。页面空间通常称为逻辑空间。

---------------------------------------------------------------------------------
默认转换
一旦应用程序建立了设备描述表,并立即开始调用GDI绘图或输出函数,则运用默认页面空间到设备空间的转换和设备空间到客户区的转换,(在应用程序调用SetWorldTransform之前不会世界坐标空间到页面空间的转换。

默认页面空间到设备空间的转换是一对一的映射;即页面空间上给出的一点映射到设备空间上的一个点。这种转换没有以矩阵指定,而是通过把视口宽除以窗口宽,把视口高除以窗口高而得出的,在默认情况下,视口尺寸为1*1像素,窗口尺寸为1*1页单位。

设备空间到物理设备(客户区,桌面和打印机),得转换结果总是一对一的;既设备空间上的一个单位总是与客户区,桌面,和打印机上的一个单位对应。这一转换的唯一用途是平移,无论窗口移到桌面的什么位置,它永远取保输出能够正确无误地出现在窗口上。

默认装换的一个独特之处是设备空间与应用程序窗口的y轴方向。
在默认的状态下,y轴正向朝下,-y方向朝上。

---------------------------------------------------------------------------------
逻辑坐标和设备坐标
几乎在所有GDI函数中使用的坐标值都是逻辑单位,Windows必须将逻辑坐标值转换为“设备单位”,
即像素。这种转换是由映射方式,窗口和视口的原点以及窗口和视口的范围决定的。
Windows对所有消息(如WM_SIZE,WM_MOUSEMOVE,WM_LBUTTONDOWN,WM_LBUTTONUP),所有的非GDI函数和一些GDI函数(GetDeviceCaps函数),永远使用设备坐标。

窗口是基于逻辑坐标的,逻辑坐标可以是像素,毫米,英寸等单位,使口是基于设备坐标(像素)的。通常,视口和客户区是相同的。
缺省的映射模式是MM_TEXT,在这种映射模式下,逻辑单位和设备单位相同。

---------------------------------------------------------------------------------
窗口(逻辑)坐标和视口(设备)坐标的转换
 xViewPort=(xWindow-xWinOrg)*xViewExt/xWinExt+xViewOrg;
 yViewPort=(yWindow-yWinOrg)*yViewExt/yWinExt+yViewOrg;
视口(设备)坐标和窗口(逻辑)坐标的转换与上面相反;
---------------------------------------------------------------------------------
在MM_TEXT映射方式下窗口(逻辑)坐标和视口(设备)坐标的转换:
xViewPort=xWindow-xWinOrg+xViewOrg;
yViewPort=yWindow-yWinOrg+yViewOrg;
视口(设备)坐标和窗口(逻辑)坐标的转换与上面相反;
---------------------------------------------------------------------------------
CDC中提供两个成员函数SetViewpoitOrg和SetWindowOrg,用来改变视口和窗口的原点。
如果将视口原点设为(xViewOrg,yViewOrg),则逻辑点(0,0)就会被映射为设备点(xViewOrg,yViewOrg),如果将窗口原点改变为(xWinOrg,yWinOrg),则逻辑点(xWinOrg,yWinOrg)就会被映射为设备点(0,0),
 即左上角。
不管对窗口和视口原点作什么改变,设备点(0,0)始终是客户区的左上角。

---------------------------------------------------------------------------------

孙鑫VC学习笔记:第十一讲 (一) 坐标空间与各种转换的概念相关推荐

  1. 孙鑫VC++学习笔记(转载至程序员之家--虎非龙)[11--15] .

    第11课 1.创建4个菜单,为其添加消息响应,用成员变量保存绘画类型.添加LButtonDown和Up消息. 2.当窗口重绘时,如果想再显示原先画的数据,则需要保存数据.为此创建一个新类来记录绘画类型 ...

  2. 孙鑫VC++学习笔记(转载至程序员之家--虎非龙)[11--15]

    第11课 1.创建4个菜单,为其添加消息响应,用成员变量保存绘画类型.添加LButtonDown和Up消息. 2.当窗口重绘时,如果想再显示原先画的数据,则需要保存数据.为此创建一个新类来记录绘画类型 ...

  3. 孙鑫VC学习笔记:第七讲

    七.对话框 2006年8月5日 14:25 因为笔记是用OneNote做的,上传以后为看不到图片,于是我截图放到相册上面, 相册地址为:http://photo.163.com/photos/good ...

  4. 孙鑫VC学习系列教程

    教程简介 1.循序渐进 从Win32SDK编程开始讲解,帮助大家理解掌握Windows编程的核心 -- 消息循环机制. 2.通俗易懂 编程语言枯燥难懂,然而通过孙鑫老师形象化的讲解,Windows和M ...

  5. 孙鑫VC++讲座笔记-(6)菜单编程

    1,弹出菜单(Pop-up)是不能用来作命令响应的. 2,MFC中菜单项消息如果利用ClassWizard来对菜单项消息分别在上述四个类中进行响应,则菜单消息传递顺序:View类--Doc类--CMa ...

  6. 孙鑫mfc学习笔记第十四课

    第十四课 网络的相关知识,网络程序的编写,Socket是连接应用程序与网络驱动程序的桥梁,Socket在应用程序中创建,通过bind与驱动程序建立关系.此后,应用程序送给Socket的数据,由Sock ...

  7. 孙鑫MFC学习笔记1.Windows应用程序运行机理

    1.MSG结构 hwnd:窗口句柄 message:消息类型 wParam & lParam:消息的附加信息(比如键值) time:消息被投递的时间 tip:typedef的作用是从变量类型区 ...

  8. mfc编程 孙鑫_孙鑫VC++视频教程笔记-(3)MFC程序框架的剖析 附1-SDI程序流程图

    1,寻找WinMain人口: 在安装目录下找到MFC文件夹下的SRC文件夹,SRC下是MFC源代码. 路径:MFC|SRC|APPMODUL.CPP: _tWinMain(HINSTANCE hIns ...

  9. 线性代数学习笔记——第二十一讲——矩阵秩的等式

    1. 矩阵转置后矩阵的秩不变 2. 行阶梯形矩阵的秩即其非零行的数目 3. 初等变换不改变矩阵的秩(证明留待补充) 4. 通过矩阵的初等变换将矩阵化为行阶梯形矩阵,以求解矩阵的秩 5. 求出矩阵的秩后 ...

  10. 高等数学学习笔记——第二十一讲——函数的一致连续性

    1. 问题引入--函数在一点连续的定义及几何意义 2. 函数一致连续的定义 3. 一致连续与连续的关系:若函数在开区间内一致连续,则其在该区间内连续 4. 一致连续的几何解释(例:正弦函数的一致连续性 ...

最新文章

  1. 目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点?...
  2. Connect(); // 2015 简要整理
  3. RocksDB线程局部缓存
  4. Java11正式发布了,我们该怎么办?
  5. C语言重要知识点回顾
  6. [转]在资源管理器中使鼠标右键增加一个命令,运行cmd,同时使得当前路径为资源管理器当前的目录...
  7. selenium ruby和java_Selenium 2之Ruby版——安装篇
  8. 信息如何实现病毒式传播?一文看懂Gossip协议
  9. python列表添加元组_python 列表与元组的操作简介
  10. 宇宙是什么,有尽头吗,为什么?
  11. linux给进程加速,Linux 利用并行进程加速命令执行
  12. 信号(signal)
  13. 2022-2-20stream流的复习
  14. 浪潮服务器一键还原系统,一键恢复 怎样做备份
  15. c语言图片的裁剪拼接,截屏、图片裁剪、拼接
  16. wps中设置公式编辑器字体颜色
  17. 跟小白学python网络爬虫实例2
  18. 学习笔记-测试利器Mocha
  19. android获取wifi开关,Android WiFi开发(一)--WiFi开关与状态监听
  20. html5 自动分享到朋友圈,html5手机端分享微信朋友圈代码

热门文章

  1. Java编程思想1-对象导论
  2. HTTP网页错误代码大全带解释
  3. 数理统计-随机变量的数字特征:期望、方差、协方差、矩、协方差矩阵
  4. 1.2 矩阵与线性方程组-向量空间、内积空间与线性映射
  5. 第四季-专题2-U-Boot新手入门
  6. 数据--第32课 -二叉树的定义
  7. PHP几种常见魔术方法与魔术变量解析 1
  8. MS SQL SERVER中的临时表
  9. zabbix修改和查看登录密码
  10. 我与Bootstrap