爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 5533|回复: 3

[已解决] 转:IDL中draw,view,image坐标体系与关系论

[复制链接]

新浪微博达人勋

发表于 2011-7-11 23:46:22 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本文讨论是IDL对象图形法情况,也就是WIDGET_DRAW 的参数GRAPHICS_LEVEL=2 时候的情况。---------------------------------------------------------------------------------------------------
在IDL的各种元素的关系和参数设置中,最复杂的莫过于widget_draw,IDLgrview,IDLgrimage,也就是下文简称的draw,view和image。对与这3样,用过IDL再熟悉不过了,很多人都会用一点,但可能很少人能完全搞明白它们之间的差数设置和坐标关系。
1 .
draw的坐标设置(也就是大小)比较简单,就两种参数xsize和ysize,x_scroll_size 和y_scroll_size.简言之,xsize和ysize是draw的实际大小,也决定着draw的坐标范围(event.x,event.y);x_scroll_size 和y_scroll_size决定这draw实际显示的大小。
2.
view与坐标相关的参数有3个:dimensions,location,viewplane_rect。其中前两个(dimensions,locaton)是与draw的坐标体系(xsize,ysize)相关,分别表示的是view在draw中显示的大小和左下点在draw里的位置。dimensions如果小于或大于draw的大小,view里的东西(model)就会缩放。viewplane_rect是view自己的虚拟空间的坐标。vewplane_rect是一个含有4个元素的1维数组,前两个表示建立的虚拟坐标左下角的坐标,后两个表示这个虚拟坐标系的范围大小。
所以本质上来说viewplane_rect与dimenstions和location没有任何关系。
3.image 做为对象原子和IDLGRPOLGYGON等等一样是不能直接放在view里面,image必须放在上一层的容器里(IDlgrmodel),然后model在放进view里。image与坐标相关的参数有2个:dimensions和location。这里的dimensions,location与view相同的两个参数也有本质的区别,image中的dimension表示的是在图像在view的虚拟坐标体系(由viewplane_rect建立)中的大小范围,location也表示的是图像左下角在view的虚拟坐标体系中的位置。
-------------------------------------------------------------------------------------------------------------------------------
实际上view里存放的东西坐标都于view的虚拟坐标体系(viewplane_rect)有关,包括image,polygon,polyline。。这里举image的例子。
view本身的位置是与draw坐标(xsize,ysize)有关。
-------------------------------------------------------------------------------------------------------------------------
例子1:
1最简单的例子是view坐标采用影像的像素坐标,在窗口中显示影像全图。以窗口大小(800,600),图像大小(1000,1000)为例。
这时候draw的 xsize=800,ysize=600
IDLgrview的 viewplane_rect =[0,0,1000,1000](意思是在view中建立与影像大小一样大,左下点坐标是[0,0]的),location 默认就是0,0
idlgrimage dimension =[1000,1000](全图显示),location 默认就是0,0
-------------------------------------------------------------------------------------------------------------------------
2    接着上面的例子,窗口(800,600),图像(1000,1000)
如果想显示原始比例大小的图像:2 种设置方法
a   就在上个例子里idlgrimage 的dimension 设为【1000,1000】或什么都不设为默认[1000,1000],IDLgrview,dimension=[800,600]和窗口大小一样,不缩放,viewplane_rect =[0,0,800,600]
b   idlgrimage 的dimension [1000,1000],IDLgrview,dimension=[1000,1000],viewplane_rect =[0,0,1000,1000]
3 使用归一化坐标体系。归一化坐标就是view的坐标范围是一个坐标范围之间,常用0-1之间,所有对象原子的都要归一化到0-1之间。是IDl中用的非常广,非常方便的一种坐标系统。
同上面例子,用这种坐标体系
显示原始大小  
oview = obj_new('IDLgrview',viewp=[0,0,1,1],dimension=[1000,1000] )
oimage = obj_new('IDLgrimage',data=img,dimensions=[1,1])
显示全图
oview = obj_new('IDLgrview',viewp=[0,0,1,1],dimension=[800,600 )
oimage = obj_new('IDLgrimage',data=img,dimensions=[1,1])
用这种坐标系,大家可以看到,view的dimension和上面两个例子是一样的。但是vewiplane_rect和image的dimension变了。viewp定义了坐标范围,image的dimension和viewp的坐标一样的。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-7-12 13:15:56 | 显示全部楼层
本帖最后由 风行浪尖 于 2011-7-12 13:18 编辑

大学毕业设计时学过IDL,现在都忘记了,买了几本书,也没有精力去学,呵呵,不过这个是个好东东,坚决顶起
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2011-7-12 16:45:44 | 显示全部楼层

回忆起来还是很快的,只是在于现在需要与否
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-8-25 20:39:49 | 显示全部楼层
楼主能不能讲通俗点,三种坐标对于绘图到底有何影响,最好附上图例
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表