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[0])
yvals.push(point[1])
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.