Ver Fonte

added Seg2d

ncannasse há 12 anos atrás
pai
commit
82330f70aa
1 ficheiros alterados com 47 adições e 0 exclusões
  1. 47 0
      h3d/col/Seg2d.hx

+ 47 - 0
h3d/col/Seg2d.hx

@@ -0,0 +1,47 @@
+package h3d.col;
+
+class Seg2d {
+
+	public var x : Float;
+	public var y : Float;
+	public var dx : Float;
+	public var dy : Float;
+	public var lenSq : Float;
+	public var invLenSq : Float;
+	
+	public inline function new( p1 : Vector, p2 : Vector ) {
+		x = p1.x;
+		y = p1.y;
+		dx = p2.x - x;
+		dy = p2.y - y;
+		lenSq = dx * dx + dy * dy;
+		invLenSq = 1 / lenSq;
+	}
+	
+	public inline function side( p : h3d.Vector ) {
+		return dx * (p.y - y) - dy * (p.x - x);
+	}
+	
+	public inline function distanceSq( p : h3d.Vector ) {
+		var px = p.x - x;
+		var py = p.y - y;
+		var t = px * dx + py * dy;
+		return if( t < 0 )
+			px * px + py * py
+		else if( t > lenSq ) {
+			var kx = p.x - (x + dx);
+			var ky = p.y - (y + dy);
+			kx * kx + ky * ky;
+		} else {
+			var tl2 = t * invLenSq;
+			var pdx = x + tl2 * dx - p.x;
+			var pdy = y + tl2 * dy - p.y;
+			pdx * pdx + pdy * pdy;
+		}
+	}
+
+	public inline function distance( p : h3d.Vector ) {
+		return FMath.sqrt(distanceSq(p));
+	}
+
+}