فهرست منبع

added h2d.col.Circle and a few things

ncannasse 12 سال پیش
والد
کامیت
b112cfe975
3فایلهای تغییر یافته به همراه57 افزوده شده و 0 حذف شده
  1. 38 0
      h2d/col/Circle.hx
  2. 10 0
      h2d/col/Point.hx
  3. 9 0
      h2d/col/Voronoi.hx

+ 38 - 0
h2d/col/Circle.hx

@@ -0,0 +1,38 @@
+package h2d.col;
+
+class Circle {
+
+	public var x : Float;
+	public var y : Float;
+	public var ray : Float;
+	
+	public inline function new( x : Float, y : Float, ray : Float ) {
+		this.x = x;
+		this.y = y;
+		this.ray = ray;
+	}
+	
+	public inline function distanceSq( p : Point ) {
+		var dx = p.x - x;
+		var dy = p.y - y;
+		var d = dx * dx + dy * dy - ray * ray;
+		return d < 0 ? 0 : d;
+	}
+
+	public inline function side( p : Point ) {
+		var dx = p.x - x;
+		var dy = p.y - y;
+		return ray * ray - (dx * dx + dy * dy);
+	}
+	
+	public inline function collideCircle( c : Circle ) {
+		var dx = x - c.x;
+		var dy = y - c.y;
+		return dx * dx + dy * dy < (ray + c.ray) * (ray + c.ray);
+	}
+
+	public function toString() {
+		return "{" + h3d.FMath.fmt(x) + "," + h3d.FMath.fmt(y) + "," + h3d.FMath.fmt(ray) + "}";
+	}
+	
+}

+ 10 - 0
h2d/col/Point.hx

@@ -10,6 +10,16 @@ class Point {
 		this.y = y;
 	}
 	
+	public inline function distanceSq( p : Point ) {
+		var dx = x - p.x;
+		var dy = y - p.y;
+		return dx * dx + dy * dy;
+	}
+	
+	public inline function distance( p : Point ) {
+		return h3d.FMath.sqrt(distanceSq(p));
+	}
+	
 	public function toString() {
 		return "{" + h3d.FMath.fmt(x) + "," + h3d.FMath.fmt(y) + "}";
 	}

+ 9 - 0
h2d/col/Voronoi.hx

@@ -329,6 +329,15 @@ class Cell {
 		this.point = point;
 		this.halfedges = [];
     }
+	
+	public function getCircle() {
+		var r = 0.;
+		for( e in halfedges ) {
+			var d = point.distanceSq(e.getStartpoint());
+			if( d > r ) r = d;
+		}
+		return new Circle(point.x, point.y, h3d.FMath.sqrt(r));
+	}
 
 	public function prepare() {
 		var halfedges = this.halfedges, iHalfedge = halfedges.length, edge;