首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Flash >

flash兑现雷达图修正BUG

2012-10-31 
flash实现雷达图修正BUG/** * @author ixqbar@gmail.com * @version 0.2 * @description 属性雷达图 * @se

flash实现雷达图修正BUG
/**
* @author ixqbar@gmail.com
* @version 0.2
* @description 属性雷达图
* @see http://www.lhxyw.com/
*/
package Util
{
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.geom.Point;
public class Radar extends Sprite
{
private var _param:Object=new Object();
private var _radar:Shape=new Shape();
/**
* 构造函数
* @param <object> param={
* feature :[0,0,0,0,0],
* position:[100,100],
* radius :100
* }
*/
public function Radar(param:Object)
{
//默认
this._param={
feature :[20,30,40,50,60],
rate :100,
radius :40,
position:[50,50],
color :[0x7CC0B5,0x23796C,0x83BCB3]
};
//合并
for(var i in param)
{
this._param[i]=param[i];
}
}
/**
* 校验参数
*/
private function checkParam()
{
if(this._param['feature'].length!=5)
{
this._param['feature']=[0,0,0,0,0];
}
for(var i:int=0,len:int=this._param['feature'].length;i<len;i++)
{
if(this._param['feature'][i]<0)
{
this._param['feature'][i]=0;
continue;
}
if(this._param['feature'][i]>this._param['rate'])
{
this._param['feature'][i]=this._param['rate'];
}
this._param['feature'][i]=Math.round(this._param['radius']*this._param['feature'][i]/this._param['rate']);
}
}
/**
* 向量旋转
* 极坐标转为Flash坐标
*/
private function route(radius:int,angle:int):Point
{
return Point.polar(radius,Math.PI*angle/180);
}
/**
* 画外层
*/
private function drawOut()
{
var _angle:int=90;
var _point:Point=new Point();
this._radar.graphics.clear();
//设置线条
this._radar.graphics.lineStyle(1,this._param['color'][0]);
this._radar.graphics.moveTo(0,0);
this._radar.graphics.lineTo(0,this._param['radius']);
for(var i:int=0;i<5;i++)
{
_angle+=72;
_point=this.route(this._param['radius'],_angle);
this._radar.graphics.lineTo(_point.x,_point.y);
this._radar.graphics.lineTo(0,0);
this._radar.graphics.moveTo(_point.x,_point.y);
}
//旋转坐标系
this._radar.rotation=180;
//设置中心位置
this._radar.x=this._param['position'][0];
this._radar.y=this._param['position'][1];
}
/**
* 画内层
*/
public function drawIn()
{
var _angle:int=90;
var _point:Point=new Point();
//填充
this._radar.graphics.beginFill(this._param['color'][1]);
//内部线条
this._radar.graphics.lineStyle(1,this._param['color'][2]);
this._radar.graphics.moveTo(0,this._param['feature'][0]);
for(var i:int=1;i<=4;i++)
{
_angle+=72;
_point=this.route(this._param['feature'][i],_angle);
this._radar.graphics.lineTo(_point.x,_point.y);
this._radar.graphics.lineTo(0,0);
this._radar.graphics.moveTo(_point.x,_point.y);
}
this._radar.graphics.lineTo(0,this._param['feature'][0]);
this._radar.graphics.lineTo(0,0);
this._radar.graphics.endFill();
}
/**
* 雷达显示
*/
public function main()
{
this.checkParam();
this.drawOut();
this.drawIn();
//返回
return this._radar;
}
}
}

热点排行