- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
中科院武汉岩土力学所白冰1、基本思想
2012-4-14 视口,窗口,窗口坐标逻辑坐标及其变换等的理解
中科院武汉岩土力学所白冰
1、基本思想
Windows GDI 要解决的就是用户文档中涉及的数值坐标如何映射到有限的硬件屏幕区
域。这是一个坐标变换的数学问题,严格地讲就是一个二维仿射变换问题(平移、反射加
缩放等)。用户数值坐标的单位对于计算机来讲是没有意义的,无论它是什么单位,它只不
过是一系列的实数。换句话说,用户的数据对于计算机来说就是一堆没有单位(从而对计算
机也就没有物理意义,因为计算机无法识别其物理意义)、只有数值大小的实数,计算机关
心的是,你的这些实数在计算机上怎么定量表示(即用多少像素来对应、显示)。归纳起来,
GDI 要做的其实就是建立在无单位的数值系统同有单位(象素)的数值系统之间的变换关系。
计算机的显示硬件相对于用户的数据而言总是有限的。如何在有限的硬件上显示用户的不同
部位的数据是计算机要深入解决的。为了叙述方便,微软把用户文档的数值坐标系称为逻辑
坐标系,或者窗口坐标系(不要再纠缠窗口二字,这二字可能不合理,但已经成为了习惯,
窗口坐标系就是逻辑坐标系)。逻辑坐标或者窗口坐标对用户脑袋而言是有单位的,但是对
于计算机而言是无所谓单位的。
但是在有限的硬件区域上,可以建立不止一种硬件象素坐标系(以象素作为单位的坐
标系),比如,可以建立“整个屏幕的坐标系”,这个坐标系是一个固定不变的坐标系统(当
然,我是说你的计算机屏幕不被你移动);也可以建立应用程序的“整窗口坐标系”,由于应
用程序的整窗口是可以在屏幕上刚性平移的,所以,这里的“整窗口坐标系”的位置是可变
的,但是这个变化是由操作系统负责的,用户不用管;还可以建立“程序窗口客户区的坐
标系”,这个坐标系也是可以变动的;这三类坐标系都是以象素为单位的实数坐标系,都是
范围有限的硬件坐标系,我们的目的就是如何将用户逻辑的内容坐标(用户数据坐标,逻辑
坐标,窗口)变换到这些选定的象素坐标系上。微软把用于绘图的屏幕、整窗口区域、客户
区所占的屏幕块都称为“设备”,所以,这三类设备相关的象素坐标系也统称为设备坐标系,
用户在GDI 绘图时,并不是随随便便就显示,而是要在屏幕上选择一块区域来显示,也就
是说用户需要首先选择设备,选择了设备,其实也就选定了使用哪个坐标系。另外,当一个
设备所占据的屏幕块恰好被选作数据呈现(显示)区时(也只有这个时机),那么这个屏幕
块就称为“视口”,如果一个设备屏幕块暂时没有被选作呈现区域,那么这个区域在这时你
就不要称为“视口”。
我们将坐标变换笼统地说成是“用户逻辑坐标同屏幕坐标变换”,这个意义不大,还容
易迷惑。具体而言,GDI 的坐标变换实质就是在窗口坐标(逻辑坐标,用户数据坐标)同选
定的某一个视口坐标系之间变换。(注意,视口有限,基于象素单位,用户坐标无限,就是
一堆实数),并且程序设计语言还提供了坐标变换修改的机会。
2、视口-窗口坐标变换公式
视口坐标系与用户数据坐标之间的最一般的变换公式为
xView =( xWin -xWinOrg ) ×xViewExt /xWinExt +xViewOrg
(1)
yView =(yWin -yWinOrg ) ×yViewExt /yWinExt +yViewOrg
这个公式包含了平移、缩放、反转等等。
对于WM_TEXT 映射模式,缩放系数为1,故这时的坐标变换公式为:
xView =( xWin -xWinOrg ) +xViewOrg
(2)
yView =(yWin -yWinOrg ) +yViewOrg
也即是
=》
xView =xWin +( -xWinOrg +xViewOrg )
(3)
yView =yWin +( -yWinOrg +yViewOrg )
我们要清楚理解这个公式,其中的(xWinOrg,yWinOrg );(xViewOrg,yViewOrg )并没
有说分别是两个坐标系的原点坐标。实际上,它们分别是我们企图在坐标变换时让其映射的
一个点对。我们把这一对点称为变换实例点。比如,在用户数据逻辑坐标系下一个点(x
WinOrg,yWinOrg )映射
文档评论(0)