home *** CD-ROM | disk | FTP | other *** search
- class CLine
- {
- var mArena;
- var mP1;
- var mP2;
- var mConcaveP1;
- var mConcaveP2;
- var mMatrix;
- var iMatrix;
- var mNormal;
- var mPointOfIntersection;
- function CLine(tArena, p1, p2, tConcaveP1, tConcaveP2)
- {
- this.mArena = tArena;
- this.mP1 = p1;
- this.mP2 = p2;
- this.mConcaveP1 = tConcaveP1;
- this.mConcaveP2 = tConcaveP2;
- var _loc3_ = Math.atan2(this.mP2.y - this.mP1.y,this.mP2.x - this.mP1.x);
- this.mMatrix = new flash.geom.Matrix();
- this.mMatrix.rotate(- _loc3_);
- this.iMatrix = this.mMatrix.clone();
- this.iMatrix.invert();
- var _loc2_ = new flash.geom.Matrix();
- _loc2_.rotate(1.5707963267948966);
- this.mNormal = new flash.geom.Point(this.mP2.x - this.mP1.x,this.mP2.y - this.mP1.y);
- this.mNormal = _loc2_.transformPoint(this.mNormal);
- this.mNormal = CLine.GetNormal(this.mP1,this.mP2);
- }
- function LineReflection(d)
- {
- return new flash.geom.Point(d.x - 2 * this.DotProduct(d,this.mNormal) * this.mNormal.x,d.y - 2 * this.DotProduct(d,this.mNormal) * this.mNormal.y);
- }
- function DotProduct(p1, p2)
- {
- return p1.x * p2.x + p1.y * p2.y;
- }
- function CrossProduct(p1, p2)
- {
- return new flash.geom.Point(p1.y * p2.x - p1.x * p2.y,p1.x * p2.y - p1.y * p2.x);
- }
- static function WheelToLineList(tLineList, wp1, wp2, r)
- {
- var _loc2_ = new Array();
- for(var _loc6_ in tLineList)
- {
- if(tLineList[_loc6_].WheelToLine(wp1,wp2,r) != undefined)
- {
- _loc2_[_loc2_.length] = tLineList[_loc6_];
- }
- }
- return _loc2_;
- }
- static function CollisionError(tLineList, p, d)
- {
- for(var _loc8_ in tLineList)
- {
- var _loc1_ = tLineList[_loc8_];
- if(_loc1_.SideOfLine(p.add(d)) < 0)
- {
- var _loc3_ = _loc1_.mNormal.clone();
- _loc3_.normalize(d.length * 2);
- var _loc6_ = p.add(d).add(_loc3_);
- var _loc5_ = undefined;
- if((_loc5_ = _loc1_._LOI_WithCorrection(p.add(d),_loc6_)) != undefined)
- {
- return _loc5_;
- }
- }
- }
- return p.add(d);
- }
- function WheelToLine(wp1, wp2, r)
- {
- return this.SideOfLine(wp1) >= 0 ? (this.mPointOfIntersection = this._LOI_WithCorrection(wp1,wp2)) : undefined;
- }
- function SideOfLine(p)
- {
- return CLine._SideOfLine(p,this.mP1,this.mP2);
- }
- static function _SideOfLine(p, p1, p2)
- {
- return - ((p2.x - p1.x) * (p.y - p1.y) - (p.x - p1.x) * (p2.y - p1.y));
- }
- function _LOI_WithCorrection(p1, p2)
- {
- var _loc2_ = this._LOI(p1,p2);
- if(_loc2_ == undefined)
- {
- return undefined;
- }
- var _loc3_ = this.mNormal.clone();
- _loc3_.normalize(0.5);
- return _loc2_.add(_loc3_);
- }
- function _LOI(p1, p2)
- {
- return CLine.LOI(p1,p2,this.mP2,this.mP1);
- }
- static function LOI(l1p1, l1p2, l2p1, l2p2)
- {
- var _loc11_ = l2p2.x - l2p1.x;
- var _loc10_ = l2p2.y - l2p1.y;
- var _loc9_ = l1p2.x - l1p1.x;
- var _loc8_ = l1p2.y - l1p1.y;
- var _loc4_ = ((l2p1.y - l1p1.y) * _loc9_ - (l2p1.x - l1p1.x) * _loc8_) / (_loc11_ * _loc8_ - _loc10_ * _loc9_);
- var _loc6_ = new flash.geom.Point(l2p1.x + _loc4_ * _loc11_,l2p1.y + _loc4_ * _loc10_);
- if(isNaN(_loc6_.x))
- {
- _loc6_ = !l2p1.equals(l2p2) ? (!l1p1.equals(l1p2) ? undefined : l1p1.clone()) : l2p2.clone();
- }
- _loc11_ = l1p2.x - l1p1.x;
- _loc10_ = l1p2.y - l1p1.y;
- _loc9_ = l2p2.x - l2p1.x;
- _loc8_ = l2p2.y - l2p1.y;
- var _loc7_ = ((l1p1.y - l2p1.y) * _loc9_ - (l1p1.x - l2p1.x) * _loc8_) / (_loc11_ * _loc8_ - _loc10_ * _loc9_);
- return !(_loc4_ >= 0 && _loc4_ <= 1 && _loc7_ >= 0 && _loc7_ <= 1) ? undefined : _loc6_;
- }
- static function LOI2(l1p1, l1p2, l2p1, l2p2)
- {
- var _loc11_ = l1p2.y - l1p1.y;
- var _loc9_ = l1p1.x - l1p2.x;
- var _loc7_ = l1p2.x * l1p1.y - l1p1.x * l1p2.y;
- var _loc10_ = l2p2.y - l2p1.y;
- var _loc8_ = l2p1.x - l2p2.x;
- var _loc6_ = l2p2.x * l2p1.y - l2p1.x * l2p2.y;
- var _loc1_ = _loc11_ * _loc8_ - _loc10_ * _loc9_;
- if(_loc1_ == 0)
- {
- return undefined;
- }
- return new flash.geom.Point((_loc9_ * _loc6_ - _loc8_ * _loc7_) / _loc1_,(_loc10_ * _loc7_ - _loc11_ * _loc6_) / _loc1_);
- }
- static function GetNormal(p1, p2)
- {
- var _loc1_ = new flash.geom.Matrix();
- _loc1_.rotate(-1.5707963267948966);
- var _loc2_ = _loc1_.transformPoint(new flash.geom.Point(p2.x - p1.x,p2.y - p1.y));
- _loc2_.normalize(1);
- return _loc2_;
- }
- }
-