Два предмета покрытия - PullRequest
0 голосов
/ 16 марта 2011

У меня есть массив bCoord, который содержит изображения x, y position, width и height.Я хочу вставить другой объект в массив, который не покрывает друг друга.Источник ниже работает очень хорошо, если размер объектов массива больше или равен объекту, который я хочу вставить туда, иначе нет.У меня есть решение для этого, но это не очень приятно.Если у кого-нибудь есть хорошее решение по этой проблеме, пожалуйста, поделитесь мной.

this.isCover    =   function(pixel, width, height)
{
    for (var i=0; i<bCoords.length; i++) 
        if (isThereBuilding(bCoords[i],pixel.x, pixel.y) || isThereBuilding(bCoords[i],pixel.x+width, pixel.y) || 
            isThereBuilding(bCoords[i],pixel.x, pixel.y+height) ||isThereBuilding(bCoords[i],pixel.x+width, pixel.y+height) )
                return bCoords[i];               
    return null;
}
function isThereBuilding(obj,x, y) 
{
    return (obj.x <= x && (obj.w+obj.x)>= x) && (obj.y <= y && (obj.h+obj.y) >= y);
}    

1 Ответ

1 голос
/ 16 марта 2011

Вы можете использовать эту функцию, чтобы проверить, перекрывает ли объект другой:

hitTest = function(o, l){
    function getOffset(o){
        for(var r = {l: o.offsetLeft, t: o.offsetTop, r: o.offsetWidth, b: o.offsetHeight};
            o = o.offsetParent; r.l += o.offsetLeft, r.t += o.offsetTop);
        return r.r += r.l, r.b += r.t, r;
    }
    for(var b, s, r = [], a = getOffset(o), j = isNaN(l.length), i = (j ? l = [l] : l).length; i;
        b = getOffset(l[--i]), (a.l == b.l || (a.l > b.l ? a.l <= b.r : b.l <= a.r))
        && (a.t == b.t || (a.t > b.t ? a.t <= b.b : b.t <= a.b)) && (r[r.length] = l[i]));
    return j ? !!r.length : r;
};

Найдено здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...