package {
import flash.display.DisplayObjectContainer;
import flash.display.Sprite;
import flash.geom.Point;
public class Polygon extends Sprite{
private var pointArr:Array;
private var _numPoint:uint;
private var _r:Number;
/**
* 多角形の頂点のポイントを算出する。
*
* @param numPoint : uint 頂点数
* @param r : Number 多角形図形の半径
*/
public function Polygon(numPoint:uint, r:Number) {
_numPoint = numPoint;
_r = r
var theta:Number = (360 / _numPoint)*(Math.PI/180);
pointArr = new Array();
for (var i:uint = 0; i < _numPoint; i++) {
var pt:Point = Point.polar(_r, theta * i);
pointArr.push(pt);
}
this.rotation -= 90;
}
/**
* 各頂点を描画
*
* @param type : String "circle" or "rect"
* @param size : Number 点の大きさ
* @param color : uint 点の色
* @param alpha : Number 点のの不透明度
*/
public function setPoitsGrahics(type:String = "circle", size:Number = 3, color:uint = 0x0099ff, alpha:Number = 1):void {
graphics.endFill();
graphics.lineStyle();
graphics.beginFill(color, alpha);
for (var i:uint = 0; i < _numPoint; i++) {
switch(type) {
case "circle" :
graphics.drawCircle(pointArr[i].x, pointArr[i].y, size);
break;
case "rect" :
graphics.drawCircle(pointArr[i].x -size/2, pointArr[i].y -size / 2, size);
break;
}
}
graphics.endFill();
}
/**
* 原点から各頂点への直線を描画
*
* @param size : Number 線幅
* @param color : uint 線色
* @param alpha : Number 線の不透明度
*/
public function setP20LineGrahics(size:Number = 1, color:uint = 0x0099ff, alpha:Number = 1):void {
graphics.endFill();
graphics.lineStyle(size, color, alpha);
for (var i:uint = 0; i < _numPoint; i++) {
graphics.moveTo(0, 0);
graphics.lineTo(pointArr[i].x, pointArr[i].y);
}
graphics.lineStyle();
}
/**
* 各頂点間の直線を描画
*
* @param size : Number 線幅
* @param color : uint 線色
* @param alpha : Number 線の不透明度
*/
public function setP2PLineGrahics(size:Number = 1, color:uint = 0x0099ff, alpha:Number = 1):void {
graphics.endFill();
graphics.lineStyle(size, color, alpha);
graphics.moveTo(pointArr[0].x, pointArr[0].y);
for (var i:uint = 1; i < _numPoint; i++) {
graphics.lineTo(pointArr[i].x, pointArr[i].y);
}
graphics.lineTo(pointArr[0].x, pointArr[0].y);
graphics.lineStyle();
}
/**
* レーダーチャートの目盛りを描画
*
* @param partition : uint 分割数
* @param size : Number 線幅
* @param color : uint 線色
* @param alpha : Number 線の不透明度
*/
public function setScaler(partition:uint,size:Number = 1,color:uint = 0x0099ff, alpha:Number = 0.5):void {
var dp:Number = _r / partition;
var dpdef:Number = dp;
graphics.endFill();
graphics.lineStyle(size, color, alpha);
while (dp < _r) {
var ptArr:Array = new Array();
for (var i:uint = 0; i < _numPoint; i++) {
var pt:Point = pointArr[i];
pt.normalize(dp);
ptArr.push(pt);
}
graphics.moveTo(ptArr[0].x, ptArr[0].y);
for (i= 1; i < _numPoint; i++) {
graphics.lineTo(ptArr[i].x, ptArr[i].y);
}
graphics.lineTo(ptArr[0].x, ptArr[0].y);
dp += dpdef;
}
graphics.lineStyle();
}
}
}
[Flash] 多角形を描く
トラックバック(0)
トラックバックURL: http://blog.sph62.net/admin/mt-tb.cgi/5


コメントする