【转】理解SetWindowOrg,SetViewportOrg,SetWindowExt,SetViewportExt

AR-HMM模型 自回归隐马尔可夫模型 AR-HMM模型 自回归隐马尔可夫模型 数据处理过程 输入的视频数据首先需要被裁剪以适合动物的大小,在这之后考虑到模型建立的目的为行为状态的分类,于是需要消除可能一帧里带有多个动作状态的行为成分,这个过程也就是对帧。对帧之后我们的为了适应模型训练还需要对每一帧的数据进行小波分解(类似傅里叶变换的信号重构),此时数据预处理阶段完成。 信号重构后的数据拥有的特征维度过多,因此需要应用主成分分析法(PCA)来选出对于分类结果贡献度最高的前十个分类特征。至此自回归隐马尔可夫模型的准备工作就完成了。 AR-HMM自 阅读详情

原文:http://hi.baidu.com/scorpio_zi_/blog/item/a981c9c777abe0d5d100608b.html

 

按习惯,(0,0)就原点,原点就是(0,0),但是如果用此来理解windows的map mode,就会走弯路。其实,稍微改变一下观念,windows的map mode就比较好理解了。举例说明:

page space---->device space
pDC->SetMapMode(MM_LOMETRIC);
pDC->SetWindowOrg(40,0);  //这句“设定”page space的原点为(40,0),注意,
//这时(40,0)就是原点,原点就是(40,0)这个点,其实,(0,0)与原点没有必然联系。这
//一句对下面的画图函数在page space中所作的图不会有任何影响。一句话:SetWindowOrg
//就是指定一下,page space中哪个点为原点。
pDC->Rectangle(0,0,100,-100);
pDC->Rectangle(0,-100,50,-200);

同理,SetViewportOrg也是指定一下,device space中哪个点为原点,两个坐标系映射时,两个原点重合。

SetWindowExt设定page space的大小,SetViewportOrg设定device space的大小,其实,真正有意义的只是两者的比例关系,例如,在一个1024*768的显示屏上:

pDC->SetMapMode(MM_ISOTROPIC);
pDC->SetWindowExt(10240,7680);
pDC->SetViewportExt(1024,768);
pDC->Rectangle(0,0,100,100);

  就会画一个10 pixels*10 pixels的矩形。其本质就是,X方向,每个逻辑单位有1024/10240个象素,Y方向每个逻辑单位有768/7680个象素。因此,下面的代码有相同的作用:

pDC->SetMapMode(MM_ISOTROPIC);
pDC->SetWindowExt(102400,76800);
pDC->SetViewportExt(10240,7680);
pDC->Rectangle(0,0,100,100);

两者本质一样,前者更易于理解。
================================

SetWindowOrg和SetViewportOrg这两个函数比较难搞懂,经过本人的google和实践终于弄明白了这两个函数的本质区别。

1.SetWindowOrg 是把设备坐标的原点移动到逻辑坐标的(X, Y)处

2.SetViewportOrg 是把逻辑坐标的原点移动到设备坐标的(X, Y)处

注意设备坐标和逻辑坐标的区别:

1.设备坐标的X, Y轴方向是固定的,单位也是固定的,X轴向右递增,Y向下递增,单位都是1像素。

2.逻辑坐标的X, Y轴方向不固定,单位也不固定,根据选择的映射模式而变化。



有了以上的解释,相信大家应该能明白为什么下面的代码的现实结果会是这样的了吧。



void CEx05aView::OnDraw(CDC* pDC)
{
pDC->SetMapMode(MM_LOMETRIC);
pDC->SetWindowOrg(100, 100);
pDC->Rectangle(0, 0, 200, 200);

pDC->SetViewportOrg(100, 100);
pDC->SelectStockObject(GRAY_BRUSH);
pDC->Rectangle(0, 0, 200, 200);
}

====================================================

建立一个合适的坐标系可以为我们的绘图带来很大的方便 。下面介绍一下如何在VC中建立我们想要的坐标系。
一 设备坐标和逻辑坐标
  设备坐标(Device Coordinate)又称为物理坐标(Physical Coordinate),是指输出设备上的坐标。通常将屏幕上的设备坐标称为屏幕坐标。设备坐标用对象距离窗口左上角的水平距离和垂直距离来指定对象的位置,是以像素为单位来表示的,设备坐标的X轴向右为正,Y轴向下为正,坐标原点位于窗口的左上角。
  逻辑坐标(Logical Coordinate)是系统用作记录的坐标。在缺省的模式(MM_TEXT)下,逻辑坐标的方向和单位与设备坐标的方向和单位相同,也是以像素为单位来表示的,X轴向右为正,Y轴向下为正,坐标原点位于窗口的左上角。逻辑坐标和设备坐标即使在缺省模式下其数值也未必一致,除了在以下两种情况下:
  1. 窗口为非滚动窗口
  2. 窗口为滚动窗口,但垂直滚动条位于滚动边框的最上端,水平滚动条位于最左端,但如果移动了滚动条这两种坐标就不一致了。
  在VC中鼠标坐标的坐标位置用设备坐标表示,但所有GDI绘图都用逻辑坐标表示,所以用鼠标绘图时,那么必须将设备坐标转换为逻辑坐标,可以使用CDC 函数DptoLP()将设备坐标转化为逻辑坐标,同样可以用LptoDP()将逻辑坐标转化为设备坐标。

二 坐标模式
  为了在不同的领域使用逻辑坐标,Windows提供了以下8种坐标模式:
  分别为MM_TEXT、MM_HIENGLISH、MM_LOENGLISH、MM_HIMETRIC、MM_LOMETRIC、MM_TWIPS、MM_ANISOTROPIC和MM_ISOTROPIC。

三 实例解析
  (一) 建立以左上角为原点,X轴和Y轴为1000的坐标,如下图
  我们可以用以下代码:
  void CTtView::OnDraw(CDC* pDC)
   {
    CTtDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    CRect rect;
    GetClientRect(&rect);

    pDC->SetMapMode(MM_ANISOTROPIC);
    pDC->SetViewportOrg(0,0);
    pDC->SetViewportExt(rect.right,rect.bottom);

    pDC->SetWindowOrg(0,0);
    pDC->SetWindowExt(1000,1000);

    pDC->MoveTo(50,50);
    pDC->LineTo(50,950);
    pDC->LineTo(950,950);
    pDC->LineTo(50,50);
   }
  代码分析:
  1. GetClientRect(&rect); 取得客户区矩形区域,将其存放在rect中
  2. 用pDC->SetMapMode(MM_ANISOTROPIC); 设置映射模式
  3. 通过pDC->SetViewportOrg(0,0);设置逻辑坐标的原点。
  4. 通过pDC->SetViewportExt(rect.right,rect.bottom);和
pDC->SetWindowExt(1000,1000);来确定逻辑坐标下和设备坐标下的尺寸对应关系
  5. 在MM_ANISOTROPIC模式下,X轴单位和Y轴单位可以不相同
  6. 坐标方向的确定方法是如果逻辑窗范围和视口范围符号相同,则逻辑坐标的方向和视口的方向相同,即X轴向右为正,Y轴向下为正。
  7. 如果将显示模式改为MM_ISOTROPIC,那么X轴单位和Y轴单位一定相同,感兴趣的读者可以自己使一下。
  (二) 建立以视窗中心为原点的坐标,如下:
  用如下代码:
  void CTtView::OnDraw(CDC* pDC)
   {
    CTtDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    CRect rect;
    GetClientRect(&rect);

    pDC->SetMapMode(MM_ANISOTROPIC);
    pDC->SetViewportOrg(rect.right/2,rect.bottom/2);
    pDC->SetViewportExt(rect.right,rect.bottom);

    pDC->SetWindowOrg(0,0);
    pDC->SetWindowExt(1000,-1000);

    pDC->MoveTo(150,150);
    pDC->LineTo(-150,-200);
    pDC->LineTo(150,-150);
    pDC->LineTo(150,150);
   }
 代码分析:
  1. 用 pDC->SetViewportOrg(rect.right/2,rect.bottom/2); 设置视口的原点。
2. 用pDC->SetViewportExt(rect.right,rect.bottom);和pDC->SetWindowExt(1000,-1000);来确定设备坐标和逻辑坐标的单位对应关系。
  3. 因为逻辑窗范围和视口范围的符号不一致,纵坐标取反,所以Y轴向上为正。

MM_LOENGLISH、MM_HIENGLISH、MM_LOMETRIC、MM_HIMETRIC、MM_TWIPS这一组是Windows提供的重要的固定比例映射模式。

它们都是x值向右方向递增,y值向下递减,并且无法改变。它们之间的区别在于比例因子见下:(我想书上P53页肯定是印错了,因为通过程序实验x值向右方向也是递增的)

MM_LOENGLISH 0.01英寸
MM_HIENGLISH 0.001英寸
MM_LOMETRIC 0.1mm
MM_HIMETRIC 0.01mm
MM_TWIPS 1/1440英寸 //应用于打印机,一个twip相当

基于Unity引擎利用OpenCV和MediaPipe的面部表情和人体运动捕捉系统 增加了模型的绑定,利用Mediapipe这个强大的库可以实现识别面部表情的捕捉和人体结构运动的捕捉,基于以上的特性加入到Unity的人物模型中,实现实时的面部表情和人体运行的捕捉 阅读详情

相关推荐

Altium Designer差分走线实战:从规则设置到阻抗匹配的完整流程

本文详细讲解了在Altium Designer中进行差分走线的完整实战流程,涵盖从原理图定义差分对、PCB布局管理、关键设计规则设置,到利用阻抗计算工具确定线宽与间距,以及布线技巧与等长处理等核心步骤。文章旨在帮助工程师掌握高速PCB设计中差分信号传输的关键技术,确保信号完整性并实现精确的阻抗匹配。

weixin_29163857的博客 254

理解SetWindowOrg,SetViewportOrg,SetWindowExt,SetViewportExt (转)

 理解SetWindowOrg,SetViewportOrg,SetWindowExt,SetViewportExt    按习惯,(0,0)就原点,原点就是(0,0),但是如果用此来理解windows的map mode,就会走弯路。其实,稍微改变一下观念,windows的map mode就比较好理解了。举例说明:page space---->device spacepDC->Se

风云爱飞 838

从零部署思澈科技SiFli-Solution:避坑指南与实战排错

本文详细介绍了从零部署思澈科技SiFli-Solution开发环境的完整流程与实战排错指南。重点解析了Keil uVision5版本选择、Butterfli工具路径配置等关键步骤,并针对Keil路径报错、函数冲突等高频问题提供了具体解决方案,帮助开发者高效避坑,快速搭建稳定的嵌入式开发环境。

devops8pract的博客 529

理解SetMapMode,SetWindowOrg,SetViewportOrg,SetWindowExt,SetViewportExt

CDC::SetMapMode  virtual int SetMapMode( int nMapMode ); 函数功能描述:该函数设置指定设备环境的映射方式,映射方式定义了将逻辑单位转换为设备单位的度量单位,并定义了设备的X、Y轴的方向。 nMapMode:指定新的映射方式,此参数可以是下面列出的任何一个值。   MM_ANISOTROPIC:逻辑单位转换成具有任意比例轴的任

xuyongbeijing2008的专栏 8919

MS2107 CVBS转USB2.0 音视频采集芯片,支持1080P@30HZ输出

MS2107 是一款视频和音频采集芯片,支持CVBS转USB2.0 ;可以将 CVBS、S-Video 和音频信号通过 USB接口传送到 PC、智能手机和平板电脑上预览或采集。

TEL18967112838的博客 2075

ArcGis布局视图中Excel表格无边框插入与图例符号边框定制技巧

本文详细解析了在ArcGis布局视图中实现Excel表格无边框插入与图例符号边框定制的专业技巧。通过源头净化Excel表格、精准粘贴以及分解图例并单独设置边框属性,有效解决了地图报告中常见的视觉粗糙问题,帮助用户提升专题图与报告的精致度与专业感。

weixin_29292535的博客 305

理解SetWindowOrg,SetViewportOrg,SetWindowExt,SetViewportExt

理解SetWindowOrg,SetViewportOrg,SetWindowExt,SetViewportExt按习惯,(0,0)就原点,原点就是(0,0),但是如果用此来理解windows的map mode,就会非常繁。其实,稍微改变一下观念,windows的map mode就比较好理解了。举例说明:page space---->device spacepDC->SetMapMode(MM_L

jronald的专栏 1927

面试中常考的数学题——截木棍、圆上取点、赛马、红蓝墨水,测试毒药、坐到正确座位问题

文章目录1.将一根木棒截成三段,问能够组成三角形的概率;2.在圆上任取三点,问能够组成锐角、直角、钝角三角形的概率;3.共有25匹马,找出最快的3匹,只有5个赛道,每次比赛只能得到5匹马的速度排序,最少需要多少次比赛;4 有两瓶红蓝墨水,体积一样,现在从红墨水中舀一勺加入蓝墨水中,搅拌均匀后,在从蓝墨水中舀一勺加到红墨水中,试问这两瓶墨水哪瓶纯度更高。 1.将一根木棒截成三段,问能够组成三角形的概率; 来源:https://blog.youkuaiyun.com/weixin_41245919/article/deta

weixin_41558411的博客 4904

SetMapMode,SetWindowExt,SetViewportExt,SetViewPortOrg函数的一些理解

  四个函数的原型如下(来自MSDN)1.virtual int SetMapMode( int nMapMode ); //设置映射的模式2.virtual CSize SetWindowExt( int cx, int cy );//设置逻辑窗口大小3.virtual CSize SetViewportExt( int cx, int cy );//设置物理设备范围,为设定原点作准

liuying's blog 916

ANSYS Products19.1下载及安装教程

ANSYS Products19.1下载及安装破解教程 前言 ANSYS软件是美国ANSYS公司研制的大型通用有限元分析(FEA)软件,是世界范围内增长最快的计算机辅助工程(CAE)软件,能与多数计算机辅助设计(CAD,computer Aided design)软件接口,实现数据的共享和交换,如Creo, NASTRAN、Algor、I-DEAS、AutoCAD等。ansys project包括一整套的软件集合,它耦合了CFD模型的前处理,求解器和后处理所需要的相关软件,特比是它的workbench模块,

Mekeater的博客 2万+

第186篇 前馈控制——提升跟踪精度的补充手段

文章摘要: 本文介绍了前馈控制的原理及其在工程中的应用。与反馈控制不同,前馈控制通过提前预测目标值或扰动信息来生成控制量,避免误差出现后再纠正的延迟问题,适用于机器人、机械臂等高速运动场景。前馈控制通常与PID反馈配合使用,前者提供粗调,后者进行微调。文章详细讲解了前馈增益的调节方法(模型法、实验法、自适应法)及两种前馈类型(指令前馈和扰动前馈),并提供了代码示例和面试实战建议,强调前馈与反馈的协同设计是提升控制精度的关键。最后预告了下一篇将讨论串级PID控制架构。

郑伟强dev的专栏 397

SetWindowOrg,SetViewportOrg,SetWindowExt,SetViewportExt

page space && device spacepDC->SetMapMode(MM_LOMETRIC);pDC->SetWindowOrg(40,0);  //这句“设定”page space的原点为(40,0),注意,//这时(40,0)就是原点,原点就是(40,0)这个点,其实,(0,0)与原点没有必然联系。这//一句对下面的画图函数在page space中所作的图不会有任何影响。一句话

笑风生 870

大数据在电力行业的应用案例解析-【电力技术】(九)大数据在电力储能运维中的深度应用(含故障预测代码)

大数据技术为电力储能运维提供了“精准化、智能化、高效化”的解决方案,破解了传统运维的核心痛点,实现了储能系统从“被动抢修”到“主动运维”的转型,为新型电力系统建设提供了重要支撑。当前,随着储能产业的快速发展,大数据与储能运维的融合将更加深入,未来将结合人工智能、物联网、区块链等技术,实现储能运维的全流程智能化——从设备故障的提前预警,到寿命的精准预测,再到运维策略的自动优化、调度协同的实时响应,进一步提升储能系统的安全性、经济性与可靠性。

getusushu的博客 86

理解SetWindowOrg等相关函数

按习惯,(0,0)就原点,原点就是(0,0),但是如果用此来理解windows的map mode,就会走弯路。其实,稍微改变一下观念,windows的map mode就比较好理解了。举例说明:page space---->device spacepDC->SetMapMode(MM_LOMETRIC);pDC->SetWindowOrg(40,0);  //这句“设定”page space的原点为

scmzw的专栏 2655

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

SetWindowExt,SetViewportExt,SetWindowOrg和SetViewportOrg的理解

CRect rectClient;          GetClientRect(rectClient);         pDC->SetMapMode(MM_ANISOTROPIC);         pDC->SetWindowExt(CSize(1000,1000));         pDC->SetViewportExt(rectClient.right,-rectClient.bottom);         pDC->SetViewportOrg(rectClient.right/2

zhufangyou的专栏 1767

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

关于SetWindowOrg和SetViewportOrg函数的说明!

关于这两个函数的说明,我就不详细叙述了,我的前两篇博客关于这两个函数的内容已经讲的比较清楚了,我只是记录一下我自己使用的心得!       void CmfcAppView::OnDraw(CDC* pDC) { CmfcAppDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; CRect rect;

李树花开,风中摇曳 9666

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SetMapMode,SetWindowOrg,SetViewportOrg,SetWindowExt,SetViewportExt

CDC::SetMapMode  virtual int SetMapMode( int nMapMode ); 函数功能描述:该函数设置指定设备环境的映射方式,映射方式定义了将逻辑单位转换为设备单位的度量单位,并定义了设备的X、Y轴的方向。 nMapMode:指定新的映射方式,此参数可以是下面列出的任何一个值。   MM_ANISOTROPIC:逻辑单位转换成具有任意比例

发展是曲折的但也是前进的 963

理解SetWindowOrg/SetViewportOrg/SetWindowExt/SetViewportExt

按习惯,(0,0)就原点,原点就是(0,0),但是如果用此来理解windows的map mode,就会走弯路。其实,稍微改变一下观念,windows的map mode就比较好理解了。举例说明: page space---->device space pDC->SetMapMode(MM_LOMETRIC); pDC->SetWindowOrg(40,0); //这句“设定”page

乱码涅磐的专栏 793

[转]mfc编程中SetViewportOrg与SetWindowOrg的理解

对于绘图,常常涉及到逻辑坐标与设备坐标,窗口(window)和视口(viewport)。这里有几点应该明白:窗口中的坐标都是逻辑坐标,视口中的坐标都是设备坐标。我们的绘图语句中用的坐标都是逻辑坐标。绘制的图形在设备(如显示器)上显示的过程为(1)逻辑坐标值减去逻辑坐标原点(setWindowOrg中设置的值)(2)上面的结果乘以比例因子变为设备坐标值(3)上面结果加上设备坐标原点值(setView

nizainade的专栏 1447
上一篇: 【转】在VC6中使用 GdiPlus
下一篇: 【转】GetTextMetrics与GetTextExtent的区别
code09
博客等级 码龄18年 31粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值