package snapfit.shape { /** * ... * @author nutsu */ public class PathLine implements IPath { //start point private var _x0:Number; private var _y0:Number; //end point private var _x1:Number; private var _y1:Number; //length private var _length:Number; public function PathLine( x0:Number, y0:Number, x1:Number, y1:Number ) { _x0 = x0; _y0 = y0; _x1 = x1; _y1 = y1; _length = -1; } public function clone():PathLine { return new PathLine( _x0, _y0, _x1, _y1 ); } public function f( t:Number ):PathPoint { return new PathPoint( _x0 + ( _x1 - _x0 ) * t, _y0 + ( _y1 - _y0 ) * t ); } public function diff( t:Number ):PathPoint { return new PathPoint( ( _x1 - _x0 ), ( _y1 - _y0 ) ); } public function vector( t:Number ):PathVector { return new PathVector( _x0 + ( _x1 - _x0 ) * t, _y0 + ( _y1 - _y0 ) * t, ( _x1 - _x0 ), ( _y1 - _y0 ) ); } public function lengthToPoint( len:Number ):PathPoint { return f( lengthToValue( len ) ); } public function lengthToValue( len:Number ):Number { return len/length; } public function get length():Number { return Math.sqrt( ( _x1 - _x0 ) * ( _x1 - _x0 ) + ( _y1 - _y0 ) * ( _y1 - _y0 ) ); } public function get x0():Number{ return _x0; } public function set x0(v:Number):void { _x0 = v; _length = -1; } public function get y0():Number{ return _y0; } public function set y0(v:Number):void { _y0 = v; _length = -1; } public function get x1():Number{ return _x1; } public function set x1(v:Number):void { _x1 = v; _length = -1; } public function get y1():Number{ return _y1; } public function set y1(v:Number):void { _y1 = v; _length = -1; } } }