ベジェ曲線の均等分割を調整する。
前に制作したNM_Irregularcircleのベジェ曲線の均等分割が精度がいまひとつのため、値によっては誤差が目立つので調整した。
やっていることはwhileを使って誤差が許容範囲になるまで分割する長さを調整して均等分割を繰り返しているだけ。 前後のポイントから三角関数を使用して、MovieClipの向きを調整している。
SAMPLE VIEW CODE
package {
import flash.events.*;
import flash.display.*;
import caurina.transitions.Tweener;
import caurina.transitions.properties.ColorShortcuts;
public class NMain extends MovieClip {
//-------------------------------------------------------------------------------- Properties
private var _this:*;
private var _stage:Stage;
private var _main:MovieClip;
//-------------------------------------------------------------------------------- Constractor
public function NMain() {
ColorShortcuts.init();
_this = this;
_this.addEventListener(Event.ADDED_TO_STAGE, Init);
}
//-------------------------------------------------------------------------------- Function
/**
* Init
*/
public function Init(eo:* = null):void {
_this.removeEventListener(Event.ADDED_TO_STAGE, Init);
_stage = stage;
_stage.scaleMode = StageScaleMode.NO_SCALE;
_stage.align = StageAlign.TOP_LEFT;
_main = new MovieClip();
_this.addChild(_main);
_stage.addEventListener(Event.RESIZE, stageresizeaction);
stageresizeaction();
initirregularcircle();
}
/**
* initialize irregularcircle
*/
private var points:Array;
private function initirregularcircle():void {
var args = {};
args.anchorlength = 6;
args.radius = 200;
args.roundval = 50;
args.irregular_ap = -100;
args.irregular_cp = 100;
args.linesize = 1;
args.linealpha = .5;
args.fillalpha = 0;
args.linecolor = 0xFFFFFF;
args.fillcolor = args.linecolor;
var irrcircle = new NM_Irregularcircle();
irrcircle.Init(args);
points = irrcircle.getSplitPoints(10, 5000, 1);
trace(points.length);
var nmg = new NM_Gradation();
var cols = nmg.Colors(0x00A0E9, 0xE4007F, points.length);
var _triangle:MovieClip;
for(var i:uint = 0; i < points.length; i ++) {
_triangle = new triangle();
var now_cnt = i;
var next_cnt = now_cnt + 1;
if(next_cnt == points.length) next_cnt = 0;
var now_p = points[now_cnt];
var next_p = points[next_cnt];
_triangle.rotation = Math.atan2(now_p.y - next_p.y, now_p.x - next_p.x) * 180 / Math.PI - 90;
//trace(_triangle.rotation);
Tweener.addTween(_triangle, {_color:cols[i]});
_triangle.x = now_p.x;
_triangle.y = now_p.y;
_triangle.alpha = .6;
_main.addChild(_triangle);
}
_main.addChild(irrcircle);
}
/**
* stage resize
*/
private function stageresizeaction(eo:* = null):void {
_main.x = Math.round(_stage.stageWidth / 2);
_main.y = Math.round(_stage.stageHeight / 2);
}
}
}