Javascript 水平矩形重叠的问题

Javascript 水平矩形重叠的问题,javascript,Javascript,所以我想解决一个图形问题。基本上有一个容器,比如说它的600像素宽。如果该容器中只有一个矩形(没有重叠的矩形),则它将占用该矩形的宽度。然而,问题是当这些矩形重叠时,宽度必须相应地缩小。我们得到了这个矩形的左上角和左下角的y坐标。(例如,从60像素向下开始,到120像素向下结束大容器) 因此,我编写了一个重叠算法,用于检查是否存在重叠,并计算该矩形重叠的矩形数(包括其本身)。然后我将容器宽度除以重叠的最大元素数,得到较小矩形的宽度 for (i = 0; i < events.le

所以我想解决一个图形问题。基本上有一个容器,比如说它的600像素宽。如果该容器中只有一个矩形(没有重叠的矩形),则它将占用该矩形的宽度。然而,问题是当这些矩形重叠时,宽度必须相应地缩小。我们得到了这个矩形的左上角和左下角的y坐标。(例如,从60像素向下开始,到120像素向下结束大容器)

因此,我编写了一个重叠算法,用于检查是否存在重叠,并计算该矩形重叠的矩形数(包括其本身)。然后我将容器宽度除以重叠的最大元素数,得到较小矩形的宽度

    for (i = 0; i < events.length; i++) {
        var event = events[i];
        var numCollisions = 0;  
        for (j = 0; j < events.length; j++) {
            var eventCmp = events[j];
            if (event.start <= eventCmp.start && event.end > eventCmp.start ||
                event.start < eventCmp.end && event.end >= eventCmp.end) {
            numCollisions++;   
        }
    }
for(i=0;i=eventCmp.end){
numCollisions++;
}
}
然而,我注意到了一个巨大的问题。如果你看下面这张图片,最右边的矩形有两个重叠的矩形。根据我的算法,你会得到不正确的容器宽度/3(包括矩形本身)。实际答案是容器宽度/2


所以问题是(在这冗长的解释之后)我需要找出两个矩形是否水平对齐。我已经绞尽脑汁想了好几个小时了。有没有关于如何做到这一点的提示?

好吧,如果发生碰撞,最简单的答案是
除以2
(不管实际发生了多少碰撞)如果你需要更复杂的东西,你能展示一个更复杂的例子吗?

一个不太理想但易于实现的算法是:

foreach y coord in the main container
    rects = find all rects which contain this y coord
    foreach rects as rect
       rect.maxHorizNeighbors = max(rects.length, rect.maxHorizNeighbors)

你还需要解决一些其他问题,但这应该让你开始你的家庭作业。特别是,在这种情况下,你可能会出现水平差距。我会让你自己去发现。

你能展示一张输入和所需输出的图片吗?我不确定你的图片是目标还是问题em.显示的图片是所需的输出。我当前的图片和我的代码对于左边的两个矩形是相同的,但是对于右边的那个矩形,宽度要小一点(因为它计算为容器宽度的1/3,而不是1/2)如果第一个矩形的右坐标大于第二个矩形的左坐标,您是否只尝试递增
numCollisions
?但是最多可以有200个矩形,它们可能以任何方式碰撞。例如,浅绿色矩形旁边可能有另一个矩形,这将缩小深绿色、浅绿色,而新的矩形将缩小o容器宽度/3。基本上,这个过程可以重复,而不仅仅是将容器宽度减半。