/*
* Copyright 2007 Michiyasu Wada
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import com.seyself.core.data.PrimeNumber;
/**
* com.seyself.math.Math2
*
* 数値の計算もろもろ。
* static関数のみで構成されています。
*
* @author Michiyasu Wada
*/
class com.seyself.math.Math2
{
private function Math2(){}
/**
* 渡された数値が、指定された桁数に満たない場合、数値の先頭に"0"を付けて桁数を揃えます。
* 引数に渡す値はどちらも整数値であり、正数でなければ正しい値は得られません。
*
* @param n : Number - 成形元となる整数値
* @param leng : Number - 桁数
* @return String - 成形された数値
* @usage
* import com.seyself.math.Math2;
* trace( Math2.figure( 32 , 4 ) ); // 出力 : 0032
*
*/
public static function figure( n:Number , leng:Number ):String
{
var _n = n+"";
if(_n.length
* import com.seyself.math.Math2;
* trace( Math2.random() ); // 出力 : -1
*
*/
public static function random():Number
{
return (Math.random()<0.5) ? -1 : 1;
}
/**
* 最小値以上、最大値以下の値を返します。
* 指定した数値が最小値を下回る場合は最小値が返され、最大値より大きい場合は最大値を返します。
* 数値が最小値以上、最大値以下の場合は、数値がそのまま返されます。
*
* @param param : Number - 数値
* @param min : Number - 最小値
* @param max : Number - 最大値
* @return Number - 最小値と最大値の間で該当する値を返します
* @usage
* import com.seyself.math.Math2;
* trace( Math2.relation( 256 , 0 , 100 ) ); // 出力 : 100
*
*/
public static function relation( param:Number , min:Number , max:Number )
{
return Math.max( Math.min( param , max ) , min );
}
/**
* 渡された引数の合計値を返します。
* 配列を使用する場合はapplyを使用してください。
*
* @param arguments : Number - 数値
* @return Number - 引数の合計値
* @usage
* import com.seyself.math.Math2;
* trace( Math2.sum( 6, 10, 200, 40 ) ); // 出力 : 256
*
*/
public static function sum():Number
{
var a = 0;
for(var i=0;i
* import com.seyself.math.Math2;
* trace( Math2.average( 6, 10, 200, 40 ) ); // 出力 : 64
*
*/
public static function average():Number
{
return Math2.sum.apply(null,arguments)/arguments.length;
}
/**
* 渡された正数の値から正と負の値を交互に変換した値を返します。
*
* @param n : Number - 正数の値
* @return Number - 引数が奇数なら負数、偶数なら正数が返ります
* @usage
* import com.seyself.math.Math2;
* for(var i=0;i<6;i++) trace( i+" => "+Math2.xcount( i ) );
*
* 出力 ---------
* 0 => 0
* 1 => 1
* 2 => -1
* 3 => 2
* 4 => -2
* 5 => 3
*
*/
public static function xcount( n:Number ):Number
{
var a = Math.floor(n/2);
if(n%2>0) a = -(a+1);
a *= -1;
return a;
}
/**
* 小数点以下 指定桁で四捨五入します。
*
* @param param : Number - 数値
* @param leng : Number - 小数点以下の桁数
* @return Number - 小数点以下 指定桁で四捨五入した値
* @usage
* import com.seyself.math.Math2;
* trace( Math2.round( Math.PI , 3 ) ); // 出力 : 3.142
*
*/
public static function round( param:Number , leng:Number ):Number
{
var _mgn = 1;
for(var i=0;i
* import com.seyself.math.Math2;
* trace( Math2.floor( Math.PI , 3 ) ); // 出力 : 3.141
*
*/
public static function floor( param:Number , leng:Number ):Number
{
var _mgn = 1;
for(var i=0;i
* import com.seyself.math.Math2;
* for(var i=1;i<85;i*=3) trace( i+" => "+Math2.loop( i , 7 ) );
*
* 出力 ---------
* 1 => 1
* 3 => 3
* 9 => 2
* 27 => 6
* 81 => 4
*
*/
public static function loop( param:Number , max:Number ):Number
{
if(param<0) return (max+(param%max))%max;
else if(param>=max) return param%max;
else return param;
}
/**
* 引数の値が正数の場合のみ、その数値を返し、負数の場合は0を返します。
*
* @param n : Number - 数値
* @return Number - 正数(0以上の数値)
* @usage
* import com.seyself.math.Math2;
* trace( Math2.positive( 20 ) ); // 出力 : 20
* trace( Math2.positive( -20 ) ); // 出力 : 0
*
*/
public static function positive( n:Number ):Number
{
if(n>0) return n;
return 0;
}
/**
* 引数の値が負数の場合のみ数値を返し、正数の場合は0を返します。
*
* @param n : Number - 数値
* @return Number - 負数(0以下の数値)
* @usage
* import com.seyself.math.Math2;
* trace( Math2.negative( 20 ) ); // 出力 : 0
* trace( Math2.negative( -20 ) ); // 出力 : -20
*
*/
public static function negative( n:Number ):Number
{
if(n<0) return n;
return 0;
}
/**
* 引数が正数の場合は+1を、負数の場合は-1、その他の場合は0を返します。
*
* @param n : Number - 数値
* @return Number - 1 もしくは -1 、0
* @usage
* import com.seyself.math.Math2;
* trace( Math2.filter( 5 ) ); // 出力 : 1
* trace( Math2.filter( -5 ) ); // 出力 : -1
* trace( Math2.filter( 0 ) ); // 出力 : 0
*
*/
public static function filter( n:Number ):Number
{
if(n>0) return 1;
if(n<0) return -1;
return 0;
}
/**
* 引数から約数を求めて配列で返します。
*
* @param n : Number - 数値
* @return Array - 約数の配列
* @usage
* import com.seyself.math.Math2;
* trace( Math2.measure( 30 ) ); // 出力 : 1,2,3,5,6,10,15,30
*
*/
public static function measure( param:Number ):Array
{
var m = param;
var res = [1,param];
var maxcount = Math.floor(Math.sqrt(m)+1);
for(var i=2;i
* import com.seyself.math.Math2;
* trace( Math2.prime( 24 ) ); // 出力 : 97
*
*/
public static function prime( param:Number )
{
var _prime:Array = PrimeNumber.getMembers();
if(param==undefined) return _prime;
return _prime[param];
}
/**
* 渡されたラジアン値を角度に変換します。
*
* @param param : Number - ラジアン
* @return Number - 角度
* @usage
* import com.seyself.math.Math2;
* trace( Math2.toDeg( Math.PI/2 ) ); // 出力 : 90
*
*/
public static function toDeg( rad:Number ):Number
{
return rad/Math.PI*180;
}
/**
* 渡された角度をラジアン値に変換します。
*
* @param param : Number - 角度
* @return Number - ラジアン
* @usage
* import com.seyself.math.Math2;
* trace( Math2.toRad( 45 ) ); // 出力 : 0.785398163397448
*
*/
public static function toRad( deg:Number ):Number
{
return deg/180*Math.PI;
}
}