zoukankan      html  css  js  c++  java
  • windows设备坐标和逻辑坐标的转换

    设备坐标通俗的讲就是我们看到的我们的视图坐标,它包含屏幕坐标、窗体坐标和客户区坐标,他们都是以窗体的左上角为准的坐标,并且是从左到右,从上到下的坐标

    简单总结一下他的特点:x坐标是从左到右,y坐标是从上到下的,原点坐标就是我们的屏幕左上角huo'zh饿我们的窗体左上角。

    逻辑坐标就是我们绘图需要参考的坐标系,所有的绘图操作都是基于逻辑坐标来进行操作的,所以要制作绘图软件或者绘制我们想要的特效必须要了解一下逻辑坐标,也需要我们手动去设置我们自定义的逻辑坐标,再次基础上完成漂亮的图像。

    首先说一下坐标系的转换:

    一组很中要的API,SetViewportExtEx和SetWindowExtEx,SetViewportExtEx是设定设备坐标系的坐标属性,SetWindowExtEx是设定逻辑坐标的的坐标属性,写一个函数看不出我们想要的的效果,这两个函数一定是成对使用,他们可以完成构造设备坐标和逻辑坐标的的比例关系,然后设定完毕我们只需要改变我们的坐标映射模式SetMapMode使用MM_ISOTROPIC模式,我们再去绘制图形,很快就会发现,我们的图形变化了,是按照我们设定的逻辑坐标比例进行绘图的,最终完成的一个工作就是屏幕上的一个像素不是表示1,而是表示我们的设定比例。

    有人会说,我们的坐标系很多都是从左到右,从下到上的啊,这样才符合我们小时候在数学数上学到的坐标系样式,不要急,上边两个API就可以完成这个操作,我们只用设定坐标类型的正负就可以构造我们逻辑坐标的方向了,比如说SetViewportExtEx(hDC,2,2,NULL);SetWindowExtEx(hDC,1,-1,NULL);就把我们的逻辑坐标设定为相比设备坐标的两倍,方向从左到右,从上到下的坐标了。

    再来看看原点的问题把:

    设备坐标和逻辑坐标的比例关系设定好了,逻辑坐标的方向也设定好了,那么我们的原点坐标不能总在屏幕左上角把,那样很不舒服,还有两个API可以完成这个问题,他们是SetViewportOrgEx和SetWindowOrgEx,这两个函数完成逻辑坐标原点对应设备坐标原点的位置,当然也可以只使用SetWindowOrgEx一个函数,默认的逻辑坐标就是在屏幕左上角(0,0)的位置,比如说:SetWindowOrgEx(hDC,-100,-100,NULL);我们就把我们的逻辑坐标原点放在相对于视图坐标(设备坐标)的(100,100)位置了,再次绘图我们发现我们绘制的图形偏移了,好了坐标转换的基础就这样子了,其余的就是在这几个api上发挥了。

  • 相关阅读:
    Luogu 1080 【NOIP2012】国王游戏 (贪心,高精度)
    Luogu 1314 【NOIP2011】聪明的质检员 (二分)
    Luogu 1315 【NOIP2011】观光公交 (贪心)
    Luogu 1312 【NOIP2011】玛雅游戏 (搜索)
    Luogu 1525 【NOIP2010】关押罪犯 (贪心,并查集)
    Luogu 1514 引水入城 (搜索,动态规划)
    UVA 1394 And Then There Was One / Gym 101415A And Then There Was One / UVAlive 3882 And Then There Was One / POJ 3517 And Then There Was One / Aizu 1275 And Then There Was One (动态规划,思维题)
    Luogu 1437 [HNOI2004]敲砖块 (动态规划)
    Luogu 1941 【NOIP2014】飞扬的小鸟 (动态规划)
    HDU 1176 免费馅饼 (动态规划)
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3036521.html
Copyright © 2011-2022 走看看