Procházet zdrojové kódy

fix, do not handle 0 length

ncannasse před 12 roky
rodič
revize
83c3c92e36
1 změnil soubory, kde provedl 8 přidání a 11 odebrání
  1. 8 11
      h3d/col/Seg.hx

+ 8 - 11
h3d/col/Seg.hx

@@ -4,25 +4,22 @@ class Seg {
 	
 	public var p1 : Vector;
 	public var p2 : Vector;
+	public var lenSq : Float;
 	
 	public inline function new( p1 : Vector, p2 : Vector ) {
 		this.p1 = p1;
 		this.p2 = p2;
+		lenSq = p1.distanceSq(p2);
 	}
 	
 	public inline function distanceSq( p : Vector ) {
-		var d = p1.distanceSq(p2);
-		return if( d == 0 )
+		var t = p.sub(p1).dot3(p2.sub(p1)) / lenSq;
+		return if( t < 0 )
 			p.distanceSq(p1);
-		else {
-			var t = p.sub(p1).dot3(p2.sub(p1)) / d;
-			if( t < 0 )
-				p.distanceSq(p1);
-			else if( t > 1 )
-				p.distanceSq(p2);
-			else
-				p.distanceSq(new Vector(p.x + t * (p2.x - p1.x), p.y + t * (p2.y - p1.y)));
-		}
+		else if( t > 1 ) {
+			p.distanceSq(p2);
+		} else
+			p.distanceSq(new Vector(p1.x + t * (p2.x - p1.x), p1.y + t * (p2.y - p1.y)));
 	}
 	
 	public inline function distance( p : Vector ) {