package { import flash.geom.Point; /** * ... * @author Chad Nelson */ public class VoronoiCircleEvent extends VoronoiEvent { public var center : Parabola; public var central_point : Point; public var radius : Number; public function VoronoiCircleEvent(center:Parabola) { type = VoronoiEventType.CIRCLE; var left : Parabola = center.left; this.center = center; var right : Parabola = center.right; this.center.circleEvent = this; // Calculate center central_point = new Point(); var a : Number = Utility.determinant(left.site.x, left.site.y, 1, center.site.x, center.site.y, 1, right.site.x, right.site.y, 1); var d : Number = Utility.determinant(Math.pow(left.site.x, 2) + Math.pow(left.site.y, 2), left.site.y, 1, Math.pow(center.site.x, 2) + Math.pow(center.site.y, 2), center.site.y, 1, Math.pow(right.site.x, 2) + Math.pow(right.site.y, 2), right.site.y, 1); var e : Number = Utility.determinant(Math.pow(left.site.x, 2) + Math.pow(left.site.y, 2), left.site.x, 1, Math.pow(center.site.x, 2) + Math.pow(center.site.y, 2), center.site.x, 1, Math.pow(right.site.x, 2) + Math.pow(right.site.y, 2), right.site.x, 1); central_point.x = d/(2*a); central_point.y = -e/(2*a); // Set lowest y coordinate for priority queue this.radius = Point.distance(central_point, center.site); this.y = central_point.y - radius; } public function toString():String { return "Circle: " + center.left.site.name + "-" + center.site.name + "-" + center.right.site.name; } } }