【发布时间】:2022-01-03 16:50:41
【问题描述】:
我编写了一个算法来随机放置 X=1,000 个没有任何重叠的矩形。矩形具有大约 5 到 50 之间的随机宽度和高度,以及大约 0 到 1000 之间的随机 x 和 y。这是我现有的算法:
-
获取随机候选矩形
-
遍历所有已放置的现有矩形并检查以确保候选不与其中任何一个重叠(第一次重叠时循环中断)
-
如果 2 中有重叠,则丢弃候选并且不增加计数,如果没有重叠,则绘制候选矩形并增加计数(使其达到 X)
我对两个矩形的重叠检查是这个 JavaScript:
const noOverlap = testRect.rbp.y < candidateRect.ltp.y ||
candidateRect.rbp.y < testRect.ltp.y ||
testRect.ltp.x > candidateRect.rbp.x ||
candidateRect.ltp.x > testRect.rbp.x
rbp 是矩形的右下点,ltp 是左上点。
当计数接近 X 时,可以连续丢弃 30,000 个。因此,我进行了优化,以在连续有一堆丢弃物时减小矩形大小。
我可以做得更好吗?
【问题讨论】:
标签: algorithm optimization overlap rectangles