快速业务通道

圆形分格统计图表

作者 佚名技术 来源 服务器技术 浏览 发布时间 2012-07-12


今天就来换点新鲜的, 也许对某些人有点帮助.....
也许bar chart很多人都会做了, 但是pie chart就挺麻烦的, 不会3D的话怎么办呢.. 在这里就教你们一个仿3D的方法做个pie chart骗吃吧 :p
这个仿3D的效果就是使用"遮照"达成, 可以看看这里的效果, 是否有兴趣继续下去
点击浏览该文件
步骤1 : 首先当然是弄个3D的pie chart图片汇入到Flash中(方法很多, 最简单的方法就是使用swift 3d软件)
按此在新窗口浏览图片
步骤2 : 把汇入的pie chart转换成MC组件, 然后在Library(ctrl+L)设定linkage名为pie
按此在新窗口浏览图片
步骤3 : 在第一帧输入
var angleA = new Array(0, 120, 280); //这里是我自己设定的, 你们可以通过计算设定扇形的开始和结束(angleB), 这里就不用写出来了吧.. 动一下脑筋就ok
var angleB = new Array(120, 280, 360);
var radius = 100; //这里是你们饼图片的半径
initial();
function initial() {
for (var i = 0; iattachMovie("pie", "pie"+i, i); //引用library中的pie chart
_root["pie"+i]._x = 200;
_root["pie"+i]._y = 200;
createEmptyMovieClip("mask"+i, i+angleA.length); //因为我的例子有三个扇形所以就制做3个遮照和3个pie
_root["mask"+i]._x = _root["pie"+i]._x;
_root["mask"+i]._y = _root["pie"+i]._y-15;
Draw(angleA[i], angleB[i], i); //开始画出所要遮照的范围
_root["pie"+i].setMask(_root["mask"+i]); //进行遮照
setHue(Math.floor(Math.random()*0xFFFFFF), i); //随机数决定三个扇形的颜色
}
}
function Point(Angle) {
var pt = new Object();
pt.x = radius*Math.cos((Math.PI/180)*Angle);
pt.y = (0.5)*radius*Math.sin((Math.PI/180)*Angle);
return pt;
}
function Draw(angleA, angleB, depth) {
_root["mask"+depth].createEmptyMovieClip("drawer", 0);
with (_root["mask"+depth].drawer) {
beginFill(0xFFFFFF, 30);
pt1 = Point(angleA); //这里会回传弧度上"相对"(angleA)的坐标, 详细可以参考圆形的教程
lineTo(pt1.x, pt1.y); //从中心点画线到回传的坐标上
if (pt1.y<=0) { //判断此点的坐标是属于-180方向还是180方向而第一下一步需要画线的y坐标
lineTo(2*pt1.x, 2*pt1.y);
} else {
lineTo(pt1.x, pt1.y+50);
}
var tempAngle = angleA+10;
while (tempAngletempPt = Point(tempAngle);
lineTo(2*tempPt.x, 2*tempPt.y);
tempAngle += 10;
}
pt2 = Point(angleB); //回传弧度结束的坐标
if (pt2.y<=0) {
lineTo(2*pt2.x, 2*pt2.y);
} else {
lineTo(pt2.x, pt2.y+50);
}
lineTo(pt2.x, pt2.y);
endFill();
}
}
function setHue(rgb, depth) { //这个上色步骤看起来虽然简单, 但却是精髓部份
c = new Color(_root["pie"+depth]);
cv = rgb;
r = (cv >> 16)/2; //这里接下来3步骤开始设定RGB光暗部份
g = ((cv >> 8) & (0xFF))/2;
b = (cv & 0xFF)/2;
c.setTransform({ra:r, ga:g, ba:b, rb:0, gb:0, bb:0, aa:100, ab:0}); //实现光暗部份, 可以参考Flash附带字典的说明
} 补充 :
<<, >>, & 这三个operator可以参考Flash附带的字典... 但我会举个清楚的例子补注
在我们的世界中一些都是以10进位做为单位, 但在计算机的世界中是以2进制, 所以所有数据都是0和1
首先来看看 1, 2等数目在计算机中的2进制是
1 = 0001
2 = 0010
3 = 0011
4 = 0100
5 = 0101
6 = 0110为何我会知道0001是1呢?? 因为计算机是使用binary(二进制)计算, 是从右到左计算,0001, 从右边的0次方一直向左加 : 1的0次方 + 0的1次方 + 0的2次方 + 0的3次方 = 1
(1^0)+(0^1)+(0^2)+(0^3)=1
0110 = (0^0) + (1^1) + (1^2) + (0^3) = 0+2+4+0

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号