使用java实现鱼刺图

来源:互联网 发布:文明5 mac 中文版下载 编辑:程序博客网 时间:2024/04/28 07:11

         刚毕业了,这是毕业设计的java web项目中的一个功能,使用鱼刺图进行辅助管理,在做的过程中,没有找到国内有公开的研究资料,不管是哪一种语言,所以就自己做了一个java的鱼刺图生成插件,虽然毕业设计做完了,不过这个程序就像自己的孩子一样,还有很多可以完善的地方,舍不得停止,也就还在继续优化下去,在做这个程序的时候,先是使用了一种比较粗糙的思想去实现生成鱼刺图,虽然也可以生成,但是生成的图和实现算法都过于粗糙,因此仅在毕业论文中提及,在本文中不打算介绍,本文将介绍本人目前刚完成的实现算法,为有需要的人提供一些参考。

        目前的实现算法中,使用了栈的思想来进行实现。使用该算法思路如下(该算法初始设定为所有“鱼刺”可以按任意顺序存入链表中):

       1)将初始的顺序结构“鱼刺”链表转换为树结构“鱼刺”链表;

       2)计算各个“鱼刺”文本块像素大小;

       3)将树结构“鱼刺”树按顺序压入栈中;

       4)从栈顶开始遍历,如果当前“鱼刺”的“子鱼刺”数为0,则将该“鱼刺”像素大小赋值为最小的像素大小,如果当前“鱼刺”的“子鱼刺”数不为0,则遍历其所有“子鱼刺”,按照相应的规则计算所有“子鱼刺”像素大小之和,再将该像素值设为当前“鱼刺”像素大小;

       5)从 “鱼刺”树顶端(即鱼刺图主骨)开始遍历,按照其所处层级的奇偶判断、像素大小及相应的规则计算该“鱼刺”的终点坐标、文本块坐标,并作图;

       6)若当前“鱼刺”的“子鱼刺”数不为0,则按照一定的规则计算其“子鱼刺”的起点坐标,通过迭代遍历整个“鱼刺”数,完成鱼刺图。

相比于基于鱼刺图基本属性的生成算法,该算法仅需五步即可完成作图,同时,在该算法中,在计算“鱼刺”块大小的时候,无需计算任何多余的数据,最终的作图算法除了依赖于“鱼刺”树以外,没有依赖于其它的任何数据。

以上这些步骤是在毕业论文中摘出来的,在目前最新的实现中,除了以上的步骤,还加入了一个可选的步骤,就是自动调整图片像素大小,实现这个可选步骤是因为在毕设的项目中,要求将鱼刺图放入网页中,为了使网页好看点,要对鱼刺图的大小进行控制,因此,实现了这个自动调整的步骤,用来控制像素,具体实现步骤如下:

1)在鱼刺图的抽象分配算法中,将鱼刺间的间距和字体大小都使用相应的变量代替,在调整程序中,根据相应的变量,指定相应的步长变量,并可设置误差范围,当像素达到了和目标像素的差距已经在误差范围中的时候,会停止调整程序的执行;

2)调整程序启动之后,会根据水平和垂直两个方向的像素和目标的像素的大小比较进行间距的增减,增减完之后,执行上述第四步。

在该调整程序中,不保证一定能调整到用户期待的像素,毕竟用户期待的像素带有大量的主观因素,而鱼刺图的实际像素有诸多约束条件。

这个程序只是我个人的一个浅薄的实现,可以结合数据库使用,还有诸多不足和可优化的地方,各位读者有任何意见都可以向我提出,我会根据大家的建议继续去优化,以下是一张目前最新实现的生成图。

abc