仿移动话费查询页面生成的饼图

简介: 最近在查询移动历史话费页面上,新增加了一个小小的消费比例的饼图,就是这个小小的饼图,给我修改话费账单页面造成了一点小小的麻烦,如果我要修改账单里得金额,我必须在Photoshop中重新计算消费比例,再根据此修改出一张新的图,非常麻烦。

        最近在查询移动历史话费页面上,新增加了一个小小的消费比例的饼图,就是这个小小的饼图,给我修改话费账单页面造成了一点小小的麻烦,如果我要修改账单里得金额,我必须在Photoshop中重新计算消费比例,再根据此修改出一张新的图,非常麻烦。因此我尝试完全仿照它的样式自己用代码绘制出这样一个“小圆饼”。还好的是,这个小饼比较简单,固定由三部分费用组成,详见下图所示。

      

       这个图虽然比较简单,但也存在绘制饼图的所有“麻烦”要素:

       (1)角度变换问题。饼图并不是正透视,而是倾斜视角,所以角度存在变幻关系。这里的饼图和视平线成一个倾斜夹角,因此我们简单的认为,假设以圆饼圆心为原点,圆饼边缘上的点的横坐标不变,而纵坐标y具有这样的变换关系:y'=y*k; 其中k=椭圆高度/椭圆宽度;如下图所示:

     

       因此 tg a'=k tg a, 即a'=atan( k*tg a );

       另一点需要注意的是,图上的角度以12点为起始点,因此圆饼边界射线的角度值范围从-90~270度,而反正切函数值的范围是-90~90度,反正切后需要把值重新映射到-90~270度范围。

      (2)另一个难点是绘制圆饼的侧面,也就是在视角可见的圆柱面,每一块侧面由上下两段椭圆弧+两侧两个一条垂直线段组成一个闭合路径,然后填充它即可。具体方法参见DrawPieSide方法,代码略。

       这样我们填入相应的金额,点击生成按钮即可生成一张饼图,然后点击保存按钮即可把图片保存到硬盘。

       源代码下载链接:    

       http://files.cnblogs.com/hoodlum1980/JRL_PieGraph.rar       

目录
相关文章
|
tengine 弹性计算 网络安全
[原创]有关tengine几个超时时间说明
负载均衡的客户和技术支持同学经常问: 7层 HTTP Keepalive 超时时间 是15秒 和http 60S 这个超时时间有什么区别? 下边列出来具体的含义 ####1. keepalive_timeout 15s; 长连接中连续两个http/https请求之间空闲的最大时间,超过
4123 0
|
存储 缓存 搜索推荐
打造个性化天气应用:Android 平台上的天气预报小助手
【9月更文挑战第2天】在这篇文章中,我们将一起探索如何从零开始构建一个简单却功能强大的天气应用。通过这个指南,你将学会如何在 Android 平台上使用 Java 编程语言和相关 API 来创建你自己的天气预报小助手。文章不仅提供了代码示例,还深入讨论了设计思路、用户界面优化以及数据管理等关键方面,旨在帮助初学者理解并实现一个完整的应用项目。
|
前端开发 Java 测试技术
【IDEA+通义灵码插件】实现属于你的大模型编程助手
【IDEA+通义灵码插件】实现属于你的大模型编程助手
1981 0
|
SQL XML Oracle
【MyBatis-Plus】MyBatis-Plus基本操作快速入门(一)
【MyBatis-Plus】MyBatis-Plus基本操作快速入门
446 0
【MyBatis-Plus】MyBatis-Plus基本操作快速入门(一)
|
机器学习/深度学习 算法 搜索推荐
Learning to Collaborate——基于多智能体强化学习的多场景联合优化
利用多智能体强化学习技术来进行多场景的联合排序优化
5829 1
|
人工智能 安全 机器学习/深度学习
阿里云安全研究成果入选人工智能顶级会议 IJCAI 2019, 业界首次用AI解决又一难题!
阿里云被主论坛收录的论文《Locate Then Detect:Web Attack Detection via Attention-based Deep Neural Networks》,首次解决了深度学习在Web攻击检测领域的结果可解释性问题,具有前所未有的创新意义,证明阿里云在安全AI技术的学术研究和应用方面业界领先。
|
编解码 安全 开发工具
阿里云视频点播播放常见问题排查指南
本文由阿里云视频云高级开发工程师筱巶撰写,主要介绍视频点播播放的前置条件以及用户在使用过程中经常遇到的问题,便于用户快速的定位并解决播放相关的问题。
15554 0
|
存储 SQL 缓存
初探OceanBase的定期合并&数据分发
定期合并和数据分发都是将UpdateServer中的增量更新分发到ChunkServer中的手段,二者的整体流程比较类似:UpdateServer冻结当前的活跃内存表(Active MemTable),生成冻结内存表,并开启新的活跃内存表,后续的更新操作都写入新的活跃内存表。
13373 0
|
vr&ar iOS开发
【Xamarin.iOS】使用UrhoSharp将3D模型带入增强现实生活
UrhoSharp将3D引入各种平台,并使用其自己的二进制mdl格式的模型文件。 3D模型有很多来源,包括cgtrader和TurboSquid,以及FBX,OBJ,DAE和BLEND等格式。
2017 0