【发布时间】:2014-07-14 16:33:51
【问题描述】:
我有一个名为myRects 的矩形数组,如下所示:
const
r1 = {x1: 10, x2: 80, y1: 10, y2: 80},
r2 = {x1: 60, x2: 100, y1: 60, y2: 100},
r3 = {x1: 90, x2: 180, y1: 90, y2: 140},
r4 = {x1: 120, x2: 140, y1: 130, y2: 160},
r5 = {x1: 160, x2: 210, y1: 80, y2: 110},
myRects = {r1: r1, r2: r2, r3: r3, r4: r4, r5: r5};
这是它们的绘制方式:
我还有一个方便的函数叫做doRectanglesIntersect(r1, r2):
function doRectanglesIntersect(r1, r2) {
return (r1.x1 <= r2.x2 &&
r2.x1 <= r1.x2 &&
r1.y1 <= r2.y2 &&
r2.y1 <= r1.y2)
}
我想要的是一个名为 recursivelyGetIntersectingRects(rect) 的函数,它将返回一个矩形数组,该数组与给定的矩形或其相交的矩形相交无限。
所以如果我将r1 传递给这个函数,我应该得到[r2,r3,r4,r5] 作为返回值,因为它们都已连接。我不介意这个函数是否返回对象字面量或键,但它应该尽可能高效并且不返回重复值。
我能够制定这个问题,但我没有找到解决方案。我的思维不会递归地工作。
这是我制作的小提琴,其中包含上面的代码和作为视觉辅助的画布绘图:http://jsfiddle.net/b3jX6/5/
【问题讨论】:
-
你有什么尝试解决这个问题?另外,你为什么要解决这个问题?对我来说闻起来像家庭作业。
-
另外:请参阅使用 c# 的相关帖子(但想法相同)。 stackoverflow.com/questions/12260491/…
-
这不是家庭作业,我希望我还年轻到还在上学!我试图通过脏矩形检查使画布库更有效。但是,对于重叠的对象,事情会变得乱七八糟。因此我需要一个合适的算法来解决这个问题。
-
很公平!我不得不问。 ;) 如果你试图让 JavaScript 库“更高效”,我建议你迭代而不是递归。 JS 中的迭代速度更快,并且不会最大化递归深度:stackoverflow.com/questions/9474465/…。
-
没问题。 :) 查看这篇文章了解更多...stackoverflow.com/questions/2752349/…
标签: javascript recursion