0引言人们对层次信息可视化深入研究,提出了一系列新的可视化技术方法,其中,典型的有普通目录树型;Robertson,Machkinlay和Card等提出的利用三维图形技术对层次结构进行可视化的方法三维圆锥树ConeTree[1];Shneiderman等提出的一种可以充分利用屏幕空间的层次信息表示模型树图Treemap[2];Lamping和Rao等提出的一种基于双曲空间的可视化和操纵大型层次结构的Focus+Contxt技术,称为双曲树Hyperbolictree[3];Richard Boardman提出了将子节点用一个个气泡表示,该气泡通过包含低一级信息来聚集细节信息,称为气泡树Bubble trees[4].三维圆锥树在表现组织结构图的时候表现出色,它能把大量的节点显示在单一的屏幕中.不足之处在于很难同时看到某个层次的所有内容,节点查询也比一般的层次信息可视化框架困难.Treemap的优点在于它可以有效利用计算机屏幕空间,并且能够很容易实现,但它的层次结构不清晰,缺乏直观性.气泡树结合了Focus+Contxt技术,在不同时刻根据用户的需要分别显示全局视图和细节视图,采用回溯机制使用户能够正确的回到之前所在的视图位置.在树的层次较少的情况下有比较好的效果,对于层次较多的树会造成频繁的人机交互,给用户带来一定的困扰.双曲树利用其特有的几何特性很好地解决了怎样在用户屏幕上显示庞大的层次信息结构的问题.各种方法都有各自的优缺点,人们可以研究出更好的新方法,也可以根据它们的特点进行综合运用.安徽工程大学借助Open GL软件包实现了三维自然导观的可视化控制系统[5].靖培栋[6]在图书馆文献检索的可视化研究中,根据中图法的特点,集成普通树型及双曲树,取得较好的效果.1集成可视化方法1.1双曲树模型
1.1.1双曲空间布局模型在双曲空间里,节点的布局是通过Klein模型[7]来实现的.图1是基于Klein模型的某节点和其子节点的布局示意图.M1、M2、M3是M的三个子节点(如果不是叶节点,这个子节点是子树的父节点),NMR是扇形区域.过M1、M2、M3画MN、MN′、MN″的平行线,这样可以保证子树不重叠.a1、a2、a3就是子树所分配到的扇形区域,a1=∠NMN’,d2=∠N’MN″,d3=∠N″MR,即子节点得到的扇形区域和父节点一样大.以此类推,可得到所有子节点的布局,扇形区域的计算方法如下.设节点M的扇形区域为(pk,qk),那么第k个子节点的扇形区域为(pk,qk)=(pk+k*qk/n,qk/n)
式中:p表示节点扇形区域的起始角度,q表示扇形区域的大小,n为子节点总数.
图1双曲空间Klein模型布局
Fig.1Klein layout model in hyperbolic space1.1.2欧氏空间映射模型双曲空间是一个抽象的空间,人们很难直观的理解,在双曲空间中完成节点的布局后,用一种方法将双曲空间里的布局结构映射到欧氏空间的二维平面上,这种方法是庞莱卡投影法.一般把通过庞莱卡投影得到的圆面称为庞莱卡圆盘(Poincare Disk)模型[8].庞莱卡投影算法把双曲空间某节点映射到扇形区域的中心,然后运用递归算法将所有节点、结构按照以上的映射方式从双曲空间映射到欧几里德空间里.1.2气泡树模型气泡树是根据树的自然属性递归地将当前节点到子节点进行分类,每个子节点用一个气泡表示,该气泡通过包含低一级信息来聚集细节信息,兄弟节点排列在以子树根节点为中心的圆周上.气泡树技术是将可视化空间分配给当前关注的的层以及相邻的几层,通过气泡膨胀将用户感兴趣的层次节点放大显示,此时上层节点包括到根节点的所有层次节点都消失了,然后通过气泡回溯回到之前所在的层.所以气泡膨胀和气泡回溯是气泡树可视化的两大关键.
1.2.1气泡膨胀气泡树地初始布局是以根节点为中心,第一层(根节点为第0层)子节点均匀分布在以根节点为圆心的圆周上,第二层子节点以同样的方式分布在第一层相应的父节点周围,第三层以及更深层次的节点则不显示.用户可以点击感兴趣层上的某个节点,该节点便成为中心,其子节点按子节点个数平均分配一个圆周的角度,即360°,此时上层节点包括到根节点的所有层次节点都消失了,显示的是当前层到下层的节点信息.就像是在很多气泡中一个气泡膨胀导致另一个气泡缩小消失一样.
1.2.2气泡回溯失去了父节点和根节点的信息,如何回到之前所在的层呢?气泡树技术采用了回溯机制.气泡膨胀后,可以通过人机交互回到当前中心节点的上一层以及更上一层,回溯的层数可以根据用户的需求和每一层的节点数目设置,一般为两到三层.第10期何杨,等:层次信息可视化集成技术的应用
武汉工程大学学报第33卷
1.3层次信息结构及可视化集成信息可视化集成过程是,先将应用领域的层次信息抽象,建立目录树信息结构,通过布局形成可视化目录树视图;同时提取普通目录树数据转换成双曲树层次信息结构,然后通过布局映射成双曲树视图,实现层次信息的可视化集成表示如图2所示.
图2可视化集成表示
Fig.2Integrated expression of visualization1.3.1领域的层次信息作为应用领域的城市区域发展规划涉及经济、文化、科技、生态、环境等各个方面,是一个典型的复杂系统.该系统的评价指标体系看作是一个由相互联系的不同层次结构与多个组成的有机整体,既有上下的层次关系,又有指标间的平行关系,不同的指标反映城市和谐发展的不同侧面,分属于不同的类别.主要由4大评价维度、10多项评价内容、数十个评价指标构成.并且,城市的和谐发展与企业息息相关,许多指标都牵涉的企业单位,而每个企业也有不同的层次和区域划分和更细的考察评价指标.所以,这是一个庞大的数据系统,用传统的目录树方法进行表示,往往要多次操作,效率很低.
1.3.2目录树的层次结构以树形结构表示领域层次信息和项目库中所有项目,按预设的行政区块(市、区、镇、三区三园等)逐级表示(见图3).图3目录树结构
Fig.3Structure of directory tree树形目录显示项目的层次化列表,每项有一个标题以及一个图标与之关联.层次结构的顶端是根项,根项没有父项,层次结构的根项之下是子项,子项以缩进方式显示在父项的下面,项目之间用线连接起来.相关类的成员变量和成员函数(见表1).
表1目录树对象结构
Table 1Object structure of directory tree
成
员
变
量m_ctrlTree:CtreeCtrl树形控件对象m_TreeBootImage:CimageList树的图标tvInsert(hParent、hInsertAfter、item):TVINSERTSTRUCT包含用来增加新项到树视控件的信息的结构体成
员
函
数GetCurSel():bool是否选中该项目A dd(HICON hIcon):int加载图标AddSubTree(Cstring strParent,CString
strChild,Cstring strField,HTREEITEM
hPartItem):CPrjBrowseView2添加子目录1.3.3双曲树的层次结构将目录树层次结构转换双曲树层次结构的时候,先把根节点的坐标设为双曲平面的中心坐标(0,0),然后把根节点周围的扇形区域分配给根节点的子节点.这样每个第二层子节点(设根节点为第一层)都有自己的扇面,每个第二层子节点都把其子节点放到自己的扇面里,可以使用递归的算法来计算每个节点在双曲面上的位置(见图4).相关类的成员变量和成员函数如表2所示.图4双曲树在欧几里得平面中的布局
Fig.4Layout of hyperbolic tree in the European space表2双曲树的对象结构
Table 2Object structure of hyperbolic tree
成
员
变
量m_dfCX/Y:double节点坐标m_dfAngle:double总扇形区域m_dfStart::double起始角度m_pParent:CtreeNode*父节点指针m_subNodeList:CObList子节点链表成
员
函
数GetCO(double R,double
dfAngle):CTreeNode计算子节点的扇形区域中心到父节点的距离CalcHyperTreeX/Y(double CO,
double dfStartAngle,double
dfAngle):double计算扇形区域中心的坐标SetHyperTreeNodeOrgPos():
CTreeNode双曲树结构的布局1.3.4气泡树的层次结构气泡树的结构和双曲树映射到平面上的结构非常相似,区别在于父节点给子节点分配的扇面总大小是360度.由于气泡树在同一时刻显示给用户只有三到四层节点的信息,也就是局部信息,所以显示非常清晰,用户可以通过人机交互获得其他层的节点信息.由于气泡树和双曲树的布局大同小异,所以其算法中用到的部分成员变量就是双曲树算法中的成员变量.气泡树布局通过对双曲树布局稍作修改即可得到.双曲树中按照Klein模型给子节点分配角度,而气泡树中子节点平均分配一个圆周的角度,即360度.双曲树中将所有的层都显示出来,而气泡树则将层数设置为某一个值,一般为3到4层.气泡树结构布局如图5、图6所示.相关类的成员变量和成员函数如表3所示.图5气泡树初始布局
Fig.5Original layout of bubble tree图6用户点击某区域层后的布局
Fig.6Layout after clicking表3气泡树的对象结构
Table 3Object structure of bubble tree
成员
变量m_dfCX/Y:double节点坐标m_dfStart:double起始角度m_pParent:CtreeNode*父节点指针m_subNodeList:CobList子节点链表成员
函数SetTreeNodeBladderOrgPos
():CTreeNode气泡树结构的布局2视图变换和可视化控制层次信息可视化的另一目标,根据用户的偏好平滑地实现人机交互,提供信息导航功能.当层次结构非常大时,在有限的屏幕上很难全面地显示整个信息,采用焦点十上下文(Focus+Context)的视图变换方法,可以在显示一个小的焦点区域详细信息的同时,保持整个内容的整体视图,使用户很容易访问上下文信息并能定位到自己所需要的信息.图7是城市区域发展规划项目层次结构使用基于双曲空间可视化方法得到的视图.最初把根节点“新沟产业板块”当作视图的焦点(见图7(a)),通过交互操作使“物流产业板块”成为视图的焦点(见图7(b)).在视图转化的过程中,视图中的节点可能旋转.例如在图中“垃圾、秸秆等重要原料运送物流区”节点开始在视图的上方,经过两次视图变化最后在视图的左下方.图7中所示的旋转对于一般用户来说是可以接受的,但是当在靠近边缘位置的节点在转变的过程中,用户可能会丢失它们的方向感.图7双曲树视图变换
Fig.7Transformation of hyperbolic tree3应用及其改进系统提供的界面分成两个部分,左边是类似于资源浏览器的树形视图,右边是双曲树和气泡树视图,这三个不同的视图中节点状态是同步实现的.例如图8和图9的集成表示中,用户点击目录树视图中某节点,那么双曲树和气泡树视图中的相应节点将作为双曲树和气泡树视图的焦点位于视图的中心,并将其它信息包括附属节点的信息同时突出显示.这样,用户就可以快捷的了解信息结构,掌握项目详细的信息及区域的整体情况.通过菜单选项,用户可以在双曲树视图和气泡树视图之间任意切换,在使用气泡树显示从某一节点回到上一层节点的时候这一操作尤为重要.图8目录树与双曲树集成表示
Fig 8Integrated expression of directory tree and hyperbolic tree图9目录树和气泡树集成表示
Fig.9Integrated expression of directory tree and bubble tree为了提高速度和合理布图,对双曲树视图进行了一些改进.双曲树的新视图生成要经过重新布局及映射,如果对所有节点重新计算,计算量会很大,对于通过映射算法都被映射到圆盘边缘的大部分的节点,实际上可以进行简化处理,计算量就大大减少了.节点间连线算法改进,增加约束条件和方法,给那些拥有更多子节点的节点分配更大的夹角,使布图更均匀,空间利用率更高.在处理视图变化的时候通过增加约束的方式保持方向感,即通过在新视图上加一些约束使新视图尽可能地和原来的视图保持一致.改进后的目录树与双曲树集成表示如图10所示,“江汉盐化工业园”被选中之后,它的子节点和它的父节点“潜江”平均分配圆周角,且它与子节点的连线选用Bezier曲线,达到了不错的视图效果.图10改进后目录树与双曲树的集成表示
Fig.10Integrated expression of hyperbolic tree and directory tree after improvement4结语各种可视化方法都有各自的优缺点,人们可以研究出更好的新方法,也可以根据它们的特点进行综合运用.普通树型的优点是可以清楚地展示局部信息细节,缺点是不易看出局部信息在整个信息体系中的位置,双曲树的优缺点与普通树相反,而气泡树则可以辅助双曲树清晰的显示节点的局部信息.本文分析研究将双曲树、气泡树可视化技术和普通目录树可视化技术相结合,并将其应用于实际项目中,取得很好的效果.通过城市区域发展规划项目实例可以看到,双曲树和气泡树在大型层次信息的可视化中很好的提供了“Focus+Context”视图,有效地为用户提供了导航功能,与普通目录树相结合为信息的检索和表示提供了更加便捷、生动的方式.但本系统还存在一些不足的地方,比如当子节点过多时显示出来会比较密集,动态拖动的速度比较缓慢等,这些问题待下一阶段进行改进.参考文献: