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