Быстрый прямоугольник для пересечения прямоугольника

Если myImage - ваше изображение 256x256, не будет ли это

image_top_left = myImage(1:128,1:128);
image_top_right = myImage(1:128,129:256);
image_bottom_left = myImage(129:256,1:128);
image_bottom_right = myImage(129:256,129:256);

?

77
задан fr1c710n 3 November 2015 в 08:59
поделиться

3 ответа

Вот как этот код можно преобразовать в JavaScript. Обратите внимание, что в вашем коде и в статье есть опечатка, как предполагалось в комментариях. В частности, r2-> right left должно быть r2-> right left , а r2-> bottom top должно быть r2-> bottom top , чтобы функция работала.

function intersectRect(r1, r2) {
  return !(r2.left > r1.right || 
           r2.right < r1.left || 
           r2.top > r1.bottom ||
           r2.bottom < r1.top);
}

Контрольный пример:

var rectA = {
  left:   10,
  top:    10,
  right:  30,
  bottom: 30
};

var rectB = {
  left:   20,
  top:    20,
  right:  50,
  bottom: 50
};

var rectC = {
  left:   70,
  top:    70,
  right:  90,
  bottom: 90
};

intersectRect(rectA, rectB);  // returns true
intersectRect(rectA, rectC);  // returns false
135
ответ дан 24 November 2019 в 10:26
поделиться

Я использовал смешение методов, для обнаружения меньшего прямоугольника в большом прямоугольнике. Это - nodejs метод и использует ширину/высоту, но может легко быть адаптировано.

            isIntersectingRect: function (r1, r2) {
              var quickCheck = (r1.x <= r2.x + r2.w &&
                      r2.x <= r1.x + r1.w &&
                      r1.y <= r2.y + r2.h &&
                      r2.y <= r1.y + r1.h)
              if (quickCheck) return true;
              var x_overlap = Math.max(0, Math.min(r1.x + r1.w, r2.x + r2.w) - Math.max(r1.x, r2.x));
              var y_overlap = Math.max(0, Math.min(r1.y + r1.h, r2.y + r2.h) - Math.max(r1.y, r2.y));
              var overlapArea = x_overlap * y_overlap;
              return overlapArea == 0;
            }
0
ответ дан 24 November 2019 в 10:26
поделиться
function intersect(a, b) {
  return (a.left <= b.right &&
          b.left <= a.right &&
          a.top <= b.bottom &&
          b.top <= a.bottom)
}

Предполагается, что верхний обычно меньше, чем нижний (т.е. y координаты увеличиваются вниз).

64
ответ дан 24 November 2019 в 10:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: