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;
}
}
}