1  
     2  /**
     3   * com.sekati.math.Range
     4   * @version 1.0.3
     5   * @author jason m horwitz | sekati.com
     6   * Copyright (C) 2007  jason m horwitz, Sekat LLC. All Rights Reserved.
     7   * Released under the MIT License: http://www.opensource.org/licenses/mit-license.php
     8   */
     9   
    10  /**
    11   * Number Range Utilities.
    12   */
    13  class com.sekati.math.Range {
    14  
    15  	/**
    16  	 * Check if a number is in range.
    17  	 * @param n (Number)
    18  	 * @param min (Number)
    19  	 * @param max (Number)
    20  	 * @param blacklist (Array) optional.
    21  	 * @return Boolean
    22  	 */
    23  	public static function isInRange(n:Number, min:Number, max:Number, blacklist:Array):Boolean {	
    24  		if (n == null || typeof(n) != "number") return false;
    25  		if(blacklist.length > 0) {
    26  			for(var i:String in blacklist) if(n == blacklist[i]) return false;
    27  		}
    28  		return (n >= min && n <= max);
    29  	}
    30  
    31  	/**
    32  	 * Returns a set of random numbers inside a specific range (unique numbers is optional)
    33  	 * @param min (Number)
    34  	 * @param max (Number)
    35  	 * @param count (Number)
    36  	 * @param unique (Boolean)
    37  	 * @return Array
    38  	 */
    39  	public static function RandRangeSet(min:Number, max:Number, count:Number, unique:Boolean):Array {
    40  		var rnds:Array = new Array( );
    41  		if (unique && count <= max - min + 1) {
    42  			//unique
    43  			// create num range array
    44  			var nums:Array = new Array( );
    45  			for (var i:Number = min; i <= max ; i++) {
    46  				nums.push( i );
    47  			}
    48  			for (var j:Number = 1; j <= count ; j++) {
    49  				// random number
    50  				var rn:Number = Math.floor( Math.random( ) * nums.length );
    51  				rnds.push( nums[rn] );
    52  				nums.splice( rn, 1 );
    53  			}
    54  		} else {
    55  			//non unique
    56  			for (var k:Number = 1; k <= count ; k++) {
    57  				rnds.push( randRangeInt( min, max ) );
    58  			}
    59  		}
    60  		return rnds;
    61  	}
    62  
    63  	/**
    64  	 * Returns a random float number within a given range
    65  	 * @param min (Number)
    66  	 * @param max (Number)
    67  	 * @return Number
    68  	 */
    69  	public static function randRangeFloat(min:Number, max:Number):Number {
    70  		return Math.random( ) * (max - min) + min;
    71  	}
    72  
    73  	/**
    74  	 * Returns a random int number within a given range
    75  	 * @param min (Number)
    76  	 * @param max (Number)
    77  	 * @return Number
    78  	 */
    79  	public static function randRangeInt(min:Number, max:Number):Number {
    80  		return Math.floor( Math.random( ) * (max - min + 1) + min );
    81  	}		
    82  
    83  	/**
    84  	 * Resolve the number inside the range. If outside the range the nearest boundary value will be returned.
    85  	 * @param val (Number)
    86  	 * @param min (Number)
    87  	 * @param max (Number)
    88  	 * @return Number
    89  	 */
    90  	public static function resolve(val:Number, min:Number, max:Number):Number {
    91  		return Math.max( Math.min( val, max ), min );	
    92  	}	
    93  
    94  	private function Range() {
    95  	}
    96  }