逻辑坐标与设备坐标的转换公式,我晕了。

brapler 2002-05-06 06:05:30
这是把逻辑坐标转换为设备坐标的公式:
xViewExt
xViewport = (xWindow - xWinOrg) × ________ + xViewOrg
xWinExt

这是我的理解:
xViewport--设备坐标(象素);
xWindow --逻辑坐标(英寸);
xWinOrg --逻辑坐标;
xViewExt --设备坐标;
xWinExt --逻辑坐标;
xViewOrg --设备坐标;
也就是说:
象素
象素=(英寸-英寸)* ---- + 英寸;
英寸

===>
象素
象素=英寸* ----;
英寸

这个公式显然不对,我想知道我哪儿错了??
...全文
294 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
brapler 2002-05-07
就是单位换算: xViewExt
----------- 把我弄晕了。
xWinExt

你看,我把公式简化一下,
xViewExt
xViewport=xWindow * --------- ;
xWinExt

xViewport是象素单位,xWindow是逻辑单位,xViewExt是象素单位,xWinExt是逻辑单位。

也就等于:
象素
象素=英寸* ----- ;
英寸


换成个简单的:

米=分米* --- ;
分米


一米等于10分米;
我现在有20分米,想转换成米;

x(米)=20*10;
x(米)=200;

看看,到底是谁错了?

明明应该是:
分米
米=分米 * --- ,才对嘛。

是我的脑袋有问题吗?
回复
crazy_lazy_pig 2002-05-07
居然还在晕,我怀疑你数学有没有及格
你可以把式子先移项再看:
xViewExt
xViewport- xViewOrg = (xWindow - xWinOrg) × ________
xWinExt
两个差表明了当前坐标点与原点的相对位置,即其离开原点的单位数(当然是有正负的,在原点左边的话此值即为负)。
乘号后面的分式自然是单位换算了
回复
brapler 2002-05-07
不会吧,书上明明说设备单位是象素,逻辑单位才能自定义??
回复
dyw 2002-05-07
将设备单位固定为某种单位(如:mm),根据你的公式变换,按比例缩放就可以了。最近,刚作完一个采用的就是这种做法。
回复
brapler 2002-05-06
这是<<windows程序设计>>上的原话:
但是在真正意义上,视口和窗口仅是数学上的概念,对于所有的映射方式,windows都用下面两个公式来将窗口(逻辑)坐标转化为视口(设备)坐标:


xViewExt
xViewport = (xWindow - xWinOrg) × ________ + xViewOrg
xWinExt

yViewExt
yViewport = (yWindow - yWinOrg) × ________ + yViewOrg
yWinExt


其中,(xWindow,yWindow)是待转换的逻辑点,(xViewport,yViewport)是转换后的设备坐标点,更像客户区坐标。
(xWinOrg,yWinOrg)是逻辑坐标的窗口原点,(xViewOrg,yViewOrg)是设备坐标的视口原点。


我还在晕。。。
回复
xb4270293 2002-05-06
MFC提供了转换函数
CDC::DPtoLP 设备坐标转换为逻辑坐标
CDC::LPtoDP 逻辑坐标转换为设备坐标
回复
pcman1990 2002-05-06
如果<<Windows程序设计>>真这么说,那它肯定是写错了。
回复
hnyyy 2002-05-06
是你自己写错了


xViewExt
xViewport = (xWindow - xWinOrg) × ________ + xViewOrg
xWinExt

这是我的理解:
xViewport--设备坐标(象素);
xWindow --逻辑坐标(英寸);
xWinOrg --逻辑坐标;
xViewExt --设备坐标;
xWinExt --逻辑坐标;
xViewOrg --设备坐标;
也就是说:
象素
象素=(英寸-英寸)* ---- + 英寸/*这里应是象素*/;
英寸

你说xViewport的单位为象素;
可xViewOrg的单位为象素却写成英寸
回复
brapler 2002-05-06
我晕了。
回复
crazy_lazy_pig 2002-05-06
你的理解有误:
两个带 Ext 的是两种映射模式的单位长度,
两个带 Org 的是窗口原点位置
Window表“逻辑**”,View表“设备**”

再看一下,是否对了?
回复
brapler 2002-05-06
我也希望xViewport是逻辑坐标,xWindow是设备坐标,如果真是那样,我就不用问这个问题了。
但明明<<windows程序设计>>上说的xViewport是设备坐标,xWindow是逻辑坐标,到底谁错了?
回复
pcman1990 2002-05-06
错。
这样理解:
(xView-xViewOrg)/xViewExt = (xWindow-xWinOrg)/xWindExt
xView是某个点的逻辑坐标,xWindow是它在窗口中的坐标(物理坐标);
xWindOrg是窗口坐标原点(一般总是0),xWindExt是窗口的“长度”;
xViewOrg是逻辑坐标原点,xViewExt是对应窗口“长度”的逻辑坐标的“长度”;
再回头看公式,应该清楚了。
回复
crazy_lazy_pig 2002-05-06
说些什么东西?
不知所云
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2002-05-06 06:05
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……