| 作者:陈长江
下载源代码
工作中需要使用到饼状图,在网上找了半天,也没有找到那种漂亮的3D饼状图的代码,都是2D的,不喜欢。 无意间,看到有人用.net实现的3D饼状图,得到启发,干脆自己做一个吧。 逆@风@者
其实很简单,就是用Pie扇形函数分别画出两个相同的、上下间距的分割圆。但是,仅仅这样还不够,你看:
(图一)
图中方框的部分都是需要修正的。原文的作者是如图二这样修正的:

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

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

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

具体过程请看代码,我都作了详细的注释。本代码在VC6.0、XP操作系统下编译通过,运行正常。
最后需要说明的是,本试例代码为了简单,只使用了20个元素的颜色数组,这在分割扇形数等于20时,最后一个仍会漏色,你可以增加颜色数来避免使用中出现这个问题,也可以通过计算自动生成颜色,从而彻底解决它。 |