1  /**
     2   * com.sekati.geom.TrigoBase
     3   * @version 1.0.3
     4   * @author jason m horwitz | sekati.com
     5   * Copyright (C) 2007  jason m horwitz, Sekat LLC. All Rights Reserved.
     6   * Released under the MIT License: http://www.opensource.org/licenses/mit-license.php
     7   * 
     8   * Sourced from nectere for dependencies
     9   */
    10  
    11  import com.sekati.geom.Point;
    12  import com.sekati.geom.Point3D;
    13  import com.sekati.math.MathBase;
    14  /**
    15   * static class wrapping various Trig utilities
    16   */
    17  class com.sekati.geom.TrigoBase {
    18  	/**
    19  	 * Convert angle to radian
    20  	 */
    21  	public static function angle2radian(a:Number):Number {
    22  		return TrigoBase.resolveAngle( a ) * Math.PI / 180;
    23  	}
    24  	/**
    25  	 * Convert radian to angle
    26  	 */
    27  	public static function radian2angle(r:Number):Number {
    28  		return TrigoBase.resolveAngle( r * 180 / Math.PI );
    29  	}
    30  	/**
    31  	 * will always give back a positive angle between 0 and 360
    32  	 */
    33  	public static function resolveAngle(a:Number):Number {
    34  		var mod:Number = a % 360;
    35  		return (mod < 0) ? 360 + mod : mod;
    36  	}
    37  	/**
    38  	 * Get angle from two points
    39  	 */
    40  	public static function getAngle(p1:Point, p2:Point):Number {
    41  		var r:Number = Math.atan2( p2.y - p1.y, p2.x - p1.x );
    42  		return TrigoBase.radian2angle( r );
    43  	}
    44  	/**
    45  	 * Get radian from two points
    46  	 */
    47  	public static function getRadian(p1:Point, p2:Point):Number {
    48  		return TrigoBase.angle2radian( TrigoBase.getAngle( p1, p2 ) );
    49  	}
    50  	/**
    51  	 * Get distance between two points
    52  	 */
    53  	public static function getDistance(p1:Point, p2:Point):Number {
    54  		var xd:Number = p1.x - p2.x;
    55  		var yd:Number = p1.y - p2.y;
    56  		return Math.sqrt( xd * xd + yd * yd );
    57  	}
    58  	public static function getZDistance(p1:Point3D, p2:Point3D):Number {
    59  		return  p1.z - p2.z;
    60  	}
    61  	/**
    62  	 * Get new point based on distance and angle from a given point
    63  	 * 
    64  	 * Note: Rounding to 3 decimals because got results like this: 6.12303176911189e-15
    65  	 * just as a precaution not to screw up movieclips positions & infinite tween loops
    66  	 */
    67  	public static function getPointFromDistanceAndAngle(centerPoint:Point, dist:Number, angle:Number):Point {
    68  		var rad:Number = TrigoBase.angle2radian( angle );
    69  		return new Point( MathBase.round( centerPoint.x + Math.cos( rad ) * dist, 3 ), MathBase.round( centerPoint.y + Math.sin( rad ) * dist, 3 ) );
    70  	}
    71  	private function TrigoBase() {
    72  	}
    73  }