I found this challenge problem which states the following :
Suppose that there are n rectangles on the XY plane. Write a program to calculate the maxi
We can have an O(n^2 (log n + m))
dynamic-programming method by adapting Andriy Berestovskyy's idea of iterating over the corners slightly to insert the relationship of the current corner vis a vis all the other rectangles into an interval tree for each of our 4n
iteration cycles.
A new tree will be created for the corner we are trying. For each rectangle's four corners we'll iterate over each of the other rectangles. What we'll insert will be the angles marking the arc the paired-rectangle's farthest corners create in relation to the current fixed corner.
In the example directly below, for the fixed lower rectangle's corner R
when inserting the record for the middle rectangle, we would insert the angles marking the arc from p2
to p1
in relation to R
(about (37 deg, 58 deg)
). Then when we check the high rectangle in relation to R
, we'll insert the interval of angles marking the arc from p4
to p3
in relation to R
(about (50 deg, 62 deg)
).
When we insert the next arc record, we'll check it against all intersecting intervals and keep a record of the most intersections.
(Note that because any arc on a 360 degree circle for our purpose has a counterpart rotated 180 degrees, we may need to make an arbitrary cutoff (any alternative insights would be welcome). For example, this means that an arc from 45 degrees to 315 degrees would split into two: [0, 45] and [135, 180]. Any non-split arc could only intersect with one or the other but either way, we may need an extra hash to make sure rectangles are not double-counted.)