GeomMath? クラス

  • 形状に関する計算もろもろ。
  • static関数のみで構成されています。

コード

サンプル

クラスファイル内に一応サンプルを書いていますので、そちらをご参照ください。

どんな風になるのか

色に関する面倒な計算式の記述が省けます。

使い方

以下にこのクラスで定義されているメソッドを列記しておきます。
メソッドは全て static で定義されています。

polygonArea( a, b, c, , , ):Number

3つ以上の直線によって構成された多角形の面積を求めます。
引数には x, y の数値プロパティを持つオブジェクトを3つ以上渡す必要があります。

import com.seyself.math.GeomMath;
var a = { x:10 , y:50 };
var b = { x:20 , y:30 };
var c = { x:30 , y:50 };
var d = { x:25 , y:80 };
var e = { x:15 , y:80 };
trace( GeomMath.polygonArea( a, b, c, d, e ) ); // 出力 : 650

ellipseArea( width:Number , height:Number ):Number

楕円形の面積を求めます。
楕円を求めるには最短の直径と最長の直径が分かっていないといけません。

circumference( width:Number , height:Number ):Number

楕円形の円周の近似値を求めます。(楕円積分)
楕円を求めるには最短の直径と最長の直径が分かっていないといけません。

intersection( a:Object, b:Object, c:Object, d:Object ):Point

直線AB と直線CD の交点を求めます。
2つの直線が平行である場合は null を返します。

import com.seyself.math.GeomMath;
var a = { x:0 , y:0 };
var b = { x:200 , y:200 };
var c = { x:100 , y:0 };
var d = { x:50 , y:200 };
trace( GeomMath.intersection( a, b, c, d ) ); // 出力 : (x=80, y=80)

quadraticBezierPath( a:Object, b:Object, c:Object, leng:Number ):Array

2次ベジェ曲線を描くための座標を求めます。
引数には x, y の数値プロパティを持つオブジェクトを3つと中間点の数を渡す必要があります。

import com.seyself.math.GeomMath;
var a = { x:0 , y:0 };
var b = { x:60 , y:120 };
var c = { x:200 , y:200 };
var leng = 30;
var path = GeomMath.quadraticBezierPath( a, b, c, leng );
var bexir = this.createEmptyMovieClip( "bezir" , 0 );
bexir.lineStyle( 1 , 0 , 100 );
bexir.moveTo( path[0].x , path[0].y );
for(var i=1;i<path.length;i++){
    bexir.lineTo( path[i].x , path[i].y );
}

cubicBezierPath( a:Object, b:Object, c:Object, d:Object, leng:Number ):Array

3次ベジェ曲線を描くための座標を求めます。
引数には x, y の数値プロパティを持つオブジェクトを4つと中間点の数を渡す必要があります。

import com.seyself.math.GeomMath;
var a = { x:0 , y:0 };
var b = { x:120 , y:30 };
var c = { x:60 , y:180 };
var d = { x:200 , y:200 };
var leng = 30;
var path = GeomMath.cubicBezierPath( a, b, c, d, leng );
var bexir = this.createEmptyMovieClip( "bezir" , 0 );
bexir.lineStyle( 1 , 0 , 100 );
bexir.moveTo( path[0].x , path[0].y );
for(var i=1;i<path.length;i++){
    bexir.lineTo( path[i].x , path[i].y );
}

staticProp( target:MovieClip , prop:Object ):Object

指定したムービークリップのプロパティを、その位置、階層に関わらず、_root座標を基にした値に変換します。
対象となるプロパティは _x , _y , _xscale , _yscale , _width , _height , _rotation の7つです。
但し、 _xscale , _yscale はそれぞれ _width , _height に置き換えられます。

import com.seyself.math.GeomMath;
var main = this.createEmptyMovieClip( "main" , 0 );
var rect = main.createEmptyMovieClip( "rect" , 0 );
rect.beginFill( 0 , 100 );
rect.moveTo( 0, 0 );
rect.lineTo( 0, 100 );
rect.lineTo( 100, 100 );
rect.lineTo( 100, 0 );
rect.lineTo( 0, 0 );
rect.endFill();

main._x = 50;
main._y = 50;
main._width = 400;
main._height = 350;

var prop = {
        _x : 50 ,
        _y : 50 ,
        _width : 100 ,
        _yscale : 50 
    }
var changeProp = GeomMath.staticProp( rect , prop );
trace( rect._x = changeProp._x ); // 出力 : 0
trace( rect._y = changeProp._y ); // 出力 : 0
trace( rect._width = changeProp._width ); // 出力 : 25
trace( rect._height = changeProp._height ); // 出力 : 14.3