From db9a109f6253a5a4de878817c0e2ac461e644a73 Mon Sep 17 00:00:00 2001 From: Colin Okay Date: Thu, 11 Feb 2021 09:39:31 -0600 Subject: generalized linesIntersect fn, using grid based cirle packing --- Source/Main.hx | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) (limited to 'Source/Main.hx') diff --git a/Source/Main.hx b/Source/Main.hx index 99f3932..c762e02 100644 --- a/Source/Main.hx +++ b/Source/Main.hx @@ -140,13 +140,21 @@ class Wiggler extends Sprite { var bbox = GeomTools.pathBoundingBox( path ); var rad = radiusGradient * radiiSizes; + var step = 0.9; while (rad > 0) { - for (i in 0 ... CIRCLE_TRIALS) - { - var circ = randomCircle( bbox, rad ); - if (isValidCircle( circ )) circles.push(circ); - } + for (cx in 0...Std.int(bbox.width / (step * rad))) + for (cy in 0...Std.int(bbox.height / (step * rad))) + { + var circ = { + x: cx * step * rad, + y:cy * step * rad, + radius:rad, + color: Std.int(Math.random() * 0xFFFFFF) + }; + + if (isValidCircle( circ )) circles.push( circ ); + } rad -= radiusGradient; } } @@ -333,10 +341,17 @@ enum Line { class GeomTools { + public static function randomBetween(lo:Float,hi:Float):Float + { + if (hi < lo) return randomBetween(hi, lo); + + return Math.random() * (hi - lo) + lo; + } + public static function circlesIntersect(c1:C1,c2:C2):Bool { var d = dist(c1,c2); - return d <= c1.radius + c2.radius; + return d < c1.radius + c2.radius; } public static function pathBoundingBox( path:Array ):Null @@ -495,7 +510,9 @@ class GeomTools } - public static function linesIntersectAt(a:Point,b:Point,c:Point,d:Point):Null + public static function linesIntersectAt + + (a:P1,b:P2,c:P3,d:P4):Null { var segments = [lineOfSegment(a, b), lineOfSegment(c, d)]; switch (segments) -- cgit v1.2.3