1  /**
     2   * com.sekati.geom.Point3D
     3   * @version 1.0.5
     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  
     9  import com.sekati.geom.Point;
    10  import com.sekati.geom.TrigoBase;
    11  
    12  /**
    13   * extend {@link com.sekati.geom.Point} with a Z-axis.
    14   * 
    15   * {@code Usage:
    16   * var Point:Point3D = new com.sekati.geom.Point3D(10,10,50);
    17   * }
    18   */
    19  //
    20  
    21  class com.sekati.geom.Point3D extends Point {
    22  
    23  	public var x:Number;
    24  	public var y:Number;
    25  	public var z:Number;
    26  
    27  	/**
    28  	 * Constructor
    29  	 * @param nX (Number)
    30  	 * @param nY (Number)
    31  	 * @param nZ (Number)
    32  	 */
    33  	public function Point3D(nX:Number, nY:Number, nZ:Number) {
    34  		super( nX, nY );
    35  		z = nZ;
    36  	}
    37  
    38  	/**
    39  	 * check if two 3D points match
    40  	 * @param p (Point3D)
    41  	 * @return Boolean
    42  	 */
    43  	public function isEqual(p:Point3D):Boolean {
    44  		return (p.x == x && p.y == y && p.z == z);
    45  	}
    46  
    47  	/**
    48  	 * get Z distance between two points
    49  	 * @param p (Point3D)
    50  	 * @return Number
    51  	 */
    52  	public function getZDistance(p:Point3D):Number {
    53  		return TrigoBase.getZDistance( this, p );
    54  	}
    55  
    56  	/**
    57  	 * Returns a new 3D point based on this point with x and y offset values
    58  	 * @param nX (Number)
    59  	 * @param nY (Number)
    60  	 * @param nZ (Number)
    61  	 * @return Point3D
    62  	 */
    63  	public function displace(nX:Number, nY:Number, nZ:Number):Point3D {
    64  		return new Point3D( x + nX, y + nY, z + nZ );
    65  	}
    66  
    67  	/**
    68  	 * Offset the Point3D object by a specified amount.
    69  	 * @param x (Number) horizontal offset
    70  	 * @param y (Number) vertical offset
    71  	 * @param z (Number) z-axis offset
    72  	 * @return Void
    73  	 */
    74  	public function offset(x:Number, y:Number, z:Number):Void {
    75  		super.offset( x, y );
    76  		this.z += z;
    77  	}	
    78  
    79  	/**
    80  	 * Clone this Point3D.
    81  	 * @return Point3D
    82  	 */
    83  	public function clone():Point3D {
    84  		return new Point3D( this.x, this.y, this.z );
    85  	}
    86  }