您的位置:逆风者 VC++ 正文
 添加时间:2008-03-21 原文发表:2008-03-21 人气:110 来源:vckbase.com

作者:陈长江

下载源代码

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

逆@风@者

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

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


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


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


(图四)

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



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

最后需要说明的是,本试例代码为了简单,只使用了20个元素的颜色数组,这在分割扇形数等于20时,最后一个仍会漏色,你可以增加颜色数来避免使用中出现这个问题,也可以通过计算自动生成颜色,从而彻底解决它。

相关文章

使用SNMP编辑(添加/删除/修改)ARP表
VC6下的GDI+双缓冲
运动搜索算法之钻石搜索(Ver1.0)
基于GDI+的数字图像处理
MFC 通用控件的初始化
浅谈输入法编程
多线程管理类
如何实现由列表控件控制的属性表
动态创建控件支持事件响应并可保存与读取
简单录、放音并保存为wav文件程序
强制编译时约束
在C++中实现C#的delegate机制
一个工业控制管道流动控件的实现
Thunk 技术的一个改进
直接调用类成员函数地址
自定义控件—特效列表控件
VC6绘制3D饼状图 - 完美版
通用 Thunk
从printf谈可变参数函数的实现
内存映射修改大文件

相关评论


本文章所属分类:首页 VC++

  热门关键字: