多叉树的可视化与遍历

81 篇文章 2 订阅
62 篇文章 0 订阅

 最近忙着做毕设,其中的骨架系统说白了就是一个多叉层次树结构,当整体框架已经差不多的时候,就一直思考着重构一下代码,因为最初只是为了实现效果,所以有很多地方的设计不是很合理。

 先自己写了一个多叉树的小型库,支持用迭代器创建,递归遍历,销毁,试着增加一些其他功能,例如给前序迭代器增加了operator++,但是发现很多地方受到了node结构的限制。多叉树的node数据结构如下:

当然实际实现是使用模板。

 

网上找到了一个kptree,多叉树,觉的非常不错。

网址:http://www.aei.mpg.de/~peekas/tree/

他的node结构如下:

而且这个库基本上实现了多叉树所有的操作。类似STL基于迭代器操作。不支持树的没有递归操作。

 

于是我基于这个库写了一个脚本配置程序 class ScriptParser,继承于tree类

脚本格式:

节点类型:

  1. ROOT 表示根节点
  2. JOINT表示一般的非终端节点
  3. END表示终端叶子节点

树中的层次包含关系通过花括号包含表示。

最后利用OpenGL实现了可视化,写了一个Figure类继承与ScriptParser类,通过脚本来显示多叉树;

显示多叉树的时候为了视觉美观。进行了细节处理:

  1. 当有两个孩子,父节点位于孩子节点的中点位置。Y方向上有个高度差。
  2. 当有多个孩子时,保证在XOZ平面上父节点正好位于孩子节点的外接圆的的中心。

最终的脚本:

显示出来的效果:

遍历的时候,逐个激活节点,颜色变黄,半斤增大一点:

               

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值