Chinaunix首页 | 论坛 | 博客
  • 博客访问: 26876
  • 博文数量: 28
  • 博客积分: 280
  • 博客等级: 二等列兵
  • 技术积分: 80
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-14 11:07
文章分类
文章存档

2015年(22)

2008年(6)

我的朋友
最近访客

分类: C/C++

2008-10-14 12:11:34

工作中需要使用到饼状图,在网上找了半天,也没有找到那种漂亮的3D饼状图的代码,都是2D的,不喜欢。 无意间,看到有人用.net实现的3D饼状图,得到启发,干脆自己做一个吧。

其实很简单,就是用Pie扇形函数分别画出两个相同的、上下间距的分割圆。但是,仅仅这样还不够,你看:

(图一)
图中方框的部分都是需要修正的。原文的作者是如图二这样修正的:


(图二)
但是,作者也说了,在饼图比较厚或者分割比较多时,因为角度的关系,还是会有漏色的现象。通过修改,我使用如图三的修正方法:


(图三)
效果不错。具体是,先绘制下边一个分割圆,在每一次绘制完一个扇形之后,就用适当的颜色修补需要遮盖的地方,因为角度的关系,有些地方不能一次修好,后面 的扇形又会破怀修过的地方,所以进行了反复的覆盖,这是最麻烦的一步。完成之后,就简单了,再把上面的分割圆画出来,就像一个盖子盖上一样。当然,使用的 颜色顺序要和下面的分割圆一样。为了使画出来的圆饼有立体感,我把颜色分成了两组,一一对应,色调是一样的,只是上面一组更亮一些,这样画出来就有立体感 了。完成图:


(图四)

你也可以使用一组不太亮的颜色,并且调整椭圆的长宽比例,使得立体图看着更舒服自然一些,如图五:



具体过程请看代码,我都作了详细的注释。本代码在VC6.0、XP操作系统下编译通过,运行正常。

最后需要说明的是,本试例代码为了简单,只使用了20个元素的颜色数组,这在分割扇形数等于20时,最后一个仍会漏色,你可以增加颜色数来避免使用中出现这个问题,也可以通过计算自动生成颜色,从而彻底解决它。
阅读(489) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~