| | 109 | |
|---|
| | 110 | |
|---|
| | 111 | /** |
|---|
| | 112 | * 引数の値が正数の場合のみ、その数値を返し、負数の場合は0を返します. |
|---|
| | 113 | * |
|---|
| | 114 | * @param n 数値 |
|---|
| | 115 | * @return 正数(0以上の数値) |
|---|
| | 116 | * @author michi at seyself.com |
|---|
| | 117 | */ |
|---|
| | 118 | public static function positive( n:Number ):Number |
|---|
| | 119 | { |
|---|
| | 120 | if(n>0) return n; |
|---|
| | 121 | return 0; |
|---|
| | 122 | } |
|---|
| | 123 | |
|---|
| | 124 | /** |
|---|
| | 125 | * 引数の値が負数の場合のみ数値を返し、正数の場合は0を返します. |
|---|
| | 126 | * |
|---|
| | 127 | * @param n 数値 |
|---|
| | 128 | * @return 負数(0以下の数値) |
|---|
| | 129 | * @author michi at seyself.com |
|---|
| | 130 | */ |
|---|
| | 131 | public static function negative( n:Number ):Number |
|---|
| | 132 | { |
|---|
| | 133 | if(n<0) return n; |
|---|
| | 134 | return 0; |
|---|
| | 135 | } |
|---|
| | 136 | |
|---|
| | 137 | /** |
|---|
| | 138 | * 引数が正数の場合は+1を、負数の場合は-1、その他の場合は0を返します. |
|---|
| | 139 | * |
|---|
| | 140 | * @param n 数値 |
|---|
| | 141 | * @return 1 もしくは -1 、0 |
|---|
| | 142 | * @author michi at seyself.com |
|---|
| | 143 | */ |
|---|
| | 144 | public static function judgment( n:Number ):Number |
|---|
| | 145 | { |
|---|
| | 146 | if(n>0) return 1; |
|---|
| | 147 | if(n<0) return -1; |
|---|
| | 148 | return 0; |
|---|
| | 149 | } |
|---|
| | 150 | |
|---|
| | 151 | /** |
|---|
| | 152 | * 引数から約数を求めて配列で返します. |
|---|
| | 153 | * |
|---|
| | 154 | * @param n 数値 |
|---|
| | 155 | * @return 約数の配列 |
|---|
| | 156 | * @author michi at seyself.com |
|---|
| | 157 | */ |
|---|
| | 158 | public static function measure( param:Number ):Array |
|---|
| | 159 | { |
|---|
| | 160 | var m = param; |
|---|
| | 161 | var res = [1,param]; |
|---|
| | 162 | var maxcount = Math.floor(Math.sqrt(m)+1); |
|---|
| | 163 | for(var i=2;i<maxcount ;i++){ |
|---|
| | 164 | if(param%i==0){ |
|---|
| | 165 | var s = 0; |
|---|
| | 166 | var e = 0; |
|---|
| | 167 | for(var k=0;k<res.length;k++){ |
|---|
| | 168 | if( res[k] ==i ) s++; |
|---|
| | 169 | if( res[k] ==param/i ) e++; |
|---|
| | 170 | } |
|---|
| | 171 | if(s==0) res.push(i); |
|---|
| | 172 | if(param/i!=i && e==0) res.push(param/i); |
|---|
| | 173 | } |
|---|
| | 174 | } |
|---|
| | 175 | return res.sort( Array.NUMERIC ); |
|---|
| | 176 | } |
|---|
| | 177 | |
|---|
| | 178 | /** |
|---|
| | 179 | * 小数点以下 指定桁で四捨五入します. |
|---|
| | 180 | * |
|---|
| | 181 | * @param param 数値 |
|---|
| | 182 | * @param len 小数点以下の桁数 |
|---|
| | 183 | * @return 小数点以下 指定桁で四捨五入した値 |
|---|
| | 184 | * @author michi at seyself.com |
|---|
| | 185 | */ |
|---|
| | 186 | public static function round( param:Number , len:uint ):Number |
|---|
| | 187 | { |
|---|
| | 188 | var _mgn = 1; |
|---|
| | 189 | for(var i=0;i<len;i++) _mgn*=10; |
|---|
| | 190 | return Math.round(param*_mgn)/_mgn; |
|---|
| | 191 | } |
|---|
| | 192 | |
|---|
| | 193 | /** |
|---|
| | 194 | * 小数点以下 指定桁数で切り捨てた値を返します. |
|---|
| | 195 | * |
|---|
| | 196 | * @param param 数値 |
|---|
| | 197 | * @param len 小数点以下の桁数 |
|---|
| | 198 | * @return 数点以下 指定桁数で切り捨てた値 |
|---|
| | 199 | * @author michi at seyself.com |
|---|
| | 200 | */ |
|---|
| | 201 | public static function floor( param:Number , len:uint ):Number |
|---|
| | 202 | { |
|---|
| | 203 | var _mgn = 1; |
|---|
| | 204 | for(var i=0;i<len;i++) _mgn*=10; |
|---|
| | 205 | return Math.floor(param*_mgn)/_mgn; |
|---|
| | 206 | } |
|---|
| | 207 | |
|---|
| | 208 | /** |
|---|
| | 209 | * 指定された数値の立方根を計算して返します。 |
|---|
| | 210 | * @param x 立方根を求めたい数値 |
|---|
| | 211 | * @return x の立方根 |
|---|
| | 212 | * @author michi at seyself.com |
|---|
| | 213 | */ |
|---|
| | 214 | public static function cuberoot( x:Number ):Number |
|---|
| | 215 | { |
|---|
| | 216 | var s:Number, t:Number, prev:Number; |
|---|
| | 217 | var posi:int; |
|---|
| | 218 | if(x==0) return 0; |
|---|
| | 219 | if(x>0) posi=1; else { posi=0; x= -x; } |
|---|
| | 220 | if(x>1) s=x; else s=1; |
|---|
| | 221 | do{ |
|---|
| | 222 | prev=s; t=s*s; s+=(x-t*s)/(2*t+x/s); |
|---|
| | 223 | } while(s<prev); |
|---|
| | 224 | if( posi ) return prev; |
|---|
| | 225 | else return -prev; |
|---|
| | 226 | } |
|---|
| | 227 | |
|---|
| | 228 | /** |
|---|
| | 229 | * 渡された正数の値から正と負の値を交互に変換した値を返します. |
|---|
| | 230 | * |
|---|
| | 231 | * @param n 正数の値 |
|---|
| | 232 | * @return 引数が奇数なら負数、偶数なら正数が返ります |
|---|
| | 233 | * @author michi at seyself.com |
|---|
| | 234 | */ |
|---|
| | 235 | public static function xcount( i:uint ):Number |
|---|
| | 236 | { |
|---|
| | 237 | var a = Math.floor(i/2); |
|---|
| | 238 | if(i%2>0) a = -(a+1); |
|---|
| | 239 | a *= -1; |
|---|
| | 240 | return a; |
|---|
| | 241 | } |
|---|
| | 242 | |
|---|
| | 243 | /** |
|---|
| | 244 | * 渡された引数の合計値を返します. |
|---|
| | 245 | * 配列を使用する場合はapplyを使用してください. |
|---|
| | 246 | * |
|---|
| | 247 | * @param ...numbers 数値 |
|---|
| | 248 | * @return 引数の合計値 |
|---|
| | 249 | * @author michi at seyself.com |
|---|
| | 250 | */ |
|---|
| | 251 | public static function sum( ...numbers ):Number |
|---|
| | 252 | { |
|---|
| | 253 | var a:Number = 0; |
|---|
| | 254 | var leng:uint = numbers.length; |
|---|
| | 255 | for(var i:uint=0;i<leng;i++) a+=numbers[i]; |
|---|
| | 256 | return a; |
|---|
| | 257 | } |
|---|
| | 258 | |
|---|
| | 259 | /** |
|---|
| | 260 | * 渡された引数の平均値を返します. |
|---|
| | 261 | * 配列を使用する場合はapplyを使用してください. |
|---|
| | 262 | * |
|---|
| | 263 | * @param ...numbers 数値 |
|---|
| | 264 | * @return 引数の平均値 |
|---|
| | 265 | * @author michi at seyself.com |
|---|
| | 266 | */ |
|---|
| | 267 | public static function average( ...numbers ):Number |
|---|
| | 268 | { |
|---|
| | 269 | return sum.apply(null,numbers)/numbers.length; |
|---|
| | 270 | } |
|---|
| | 271 | |
|---|
| | 272 | /** |
|---|
| | 273 | * -1.0 から 1.0 の間の乱数を生成します. |
|---|
| | 274 | * |
|---|
| | 275 | * @return 乱数 |
|---|
| | 276 | * @author michi at seyself.com |
|---|
| | 277 | */ |
|---|
| | 278 | public static function random():Number |
|---|
| | 279 | { |
|---|
| | 280 | return Math.random() * 2 - 1; |
|---|
| | 281 | } |
|---|
| | 282 | |
|---|
| | 283 | /** |
|---|
| | 284 | * -1.0 から 1.0 の間の偏向乱数を生成します. |
|---|
| | 285 | * |
|---|
| | 286 | * @param interation 数値が多いほど乱数値は0に近づきます |
|---|
| | 287 | * @return 乱数 |
|---|
| | 288 | * @author michi at seyself.com |
|---|
| | 289 | */ |
|---|
| | 290 | public static function biasedRandom(interation:uint = 2):Number |
|---|
| | 291 | { |
|---|
| | 292 | var n:Number = 0; |
|---|
| | 293 | for (var i:int = 0; i < interation; i++ ) n += random(); |
|---|
| | 294 | return n / interation; |
|---|
| | 295 | } |
|---|
| | 296 | |
|---|
| | 297 | /** |
|---|
| | 298 | * 0.0 から 1.0 の間の疑似乱数を生成します.Perlin ノイズとはまったく関係ないです。 |
|---|
| | 299 | * (注: あまり極端な値を設定すると正しく動作しないかもしれません。) |
|---|
| | 300 | * |
|---|
| | 301 | * @param i インデックス値 |
|---|
| | 302 | * @param seed 乱数の定義値 |
|---|
| | 303 | * @return 数値 |
|---|
| | 304 | * @author michi at seyself.com |
|---|
| | 305 | */ |
|---|
| | 306 | public static function function noise( i:uint, seed:Number=0.0 ):Number |
|---|
| | 307 | { |
|---|
| | 308 | seed %= 0xFFF; |
|---|
| | 309 | i %= 0x7FF; |
|---|
| | 310 | var P:Number = 3.14159265358979 * ( seed + 0.5 ); |
|---|
| | 311 | var t:Number = 173*i*i*i+13577 % 3568927; |
|---|
| | 312 | var r:Number = (i*2.71828182845905+t)*P%1; |
|---|
| | 313 | return r; |
|---|
| | 314 | } |
|---|
| | 315 | |
|---|
| | 316 | /** |
|---|
| | 317 | * 渡されたラジアン値を角度に変換します. |
|---|
| | 318 | * |
|---|
| | 319 | * @param param ラジアン |
|---|
| | 320 | * @return 角度 |
|---|
| | 321 | * @author michi at seyself.com |
|---|
| | 322 | */ |
|---|
| | 323 | public static function degree( radian:Number ):Number |
|---|
| | 324 | { |
|---|
| | 325 | return radian / Math.PI * 180; |
|---|
| | 326 | } |
|---|
| | 327 | |
|---|
| | 328 | /** |
|---|
| | 329 | * 渡された角度をラジアン値に変換します. |
|---|
| | 330 | * |
|---|
| | 331 | * @param param 角度 |
|---|
| | 332 | * @return ラジアン |
|---|
| | 333 | * @author michi at seyself.com |
|---|
| | 334 | */ |
|---|
| | 335 | public static function radian( degree:Number ):Number |
|---|
| | 336 | { |
|---|
| | 337 | return degree / 180 * Math.PI; |
|---|
| | 338 | } |
|---|
| | 339 | |
|---|
| | 340 | /** |
|---|
| | 341 | * 2つの角( angle1 から angle2 )の内角の値を調べます |
|---|
| | 342 | * |
|---|
| | 343 | * @param angle1 角度 (ラジアン単位) |
|---|
| | 344 | * @param angle2 角度 (ラジアン単位) |
|---|
| | 345 | * @return 2つの角度の内角距離 |
|---|
| | 346 | * @author michi at seyself.com |
|---|
| | 347 | */ |
|---|
| | 348 | public static function interiorAngle(angle1:Number, angle2:Number):Number |
|---|
| | 349 | { |
|---|
| | 350 | var a:Number = angle2 - angle1; |
|---|
| | 351 | return Math.atan2(Math.sin(a), Math.cos(a)); |
|---|
| | 352 | } |
|---|
| | 353 | |
|---|
| | 354 | |
|---|
| | 355 | |
|---|