I have these two functions and I was just wondering if there is any way to shorten the line of code with the many && statements. Shortening of the rest of the code would be cool too, but it's not necessary. I'm trying to learn if there is a better way to accomplish this though.
# Accepts two stroks and determines if they overlap with one another def overlap? stroke1, stroke2 min_x = 0 max_x = 1 min_y = 2 max_y = 3 bounds1 = get_bounds stroke1 bounds2 = get_bounds stroke2 return true if (bounds1[max_x] >= bounds2[min_x]) && (bounds1[max_y] >= bounds2[min_y]) && (bounds2[max_x] >= bounds1[min_x]) && (bounds2[max_y] >= bounds1[min_y]) return false end # Returns an array of bounds [x_min, x_max, y_min, y_max] for the stroke def get_bounds stroke # Arrays for storing x and y values for the stroke currently being inspected xvals = Array.new yvals = Array.new stroke.each_slice(3) do |point| xvals.push(point) yvals.push(point) end # A temporary array that stores the min/max x/y for the stroke being inspected bounds = Array.new bounds << xvals.min << xvals.max << yvals.min << yvals.max return bounds end
I actually did not write this code, but I offered to clean it up and I came upon this and thought that there was probably a better way.