Nano Hash - криптовалюты, майнинг, программирование

Вычисление площади пересечения прямоугольников в java

У меня проблема с одним алгоритмом. Я полагаю, чтобы вычислить площадь пересечения двух прямоугольников (оба параллельны OX и OY). Прямоугольник (назовем его A) описывается (x1,y1,x2,y2) верхним левым углом (x1,y1) и нижним правым углом (x2,y2), второй будет B (x3,y3,x4, у4). Я думал об одном алгоритме, но он кажется хромым.

if(all of the points of rectangle A are inside of rectangle B)
     calculate(A);
else if(all of points the points of rectangle B are in A)
     calculate(B);
else if(x1 y1 is inside rectangle B)
        if(x1 is on the left from x3){
            if(y1 is under the y3)
         else
        }

и т.д. это будет так долго и глупо.

23.10.2012

  • Рассмотрим java.awt.geom.Area. 23.10.2012

Ответы:


1

Да, это кажется немного неэффективным, потому что, как мне кажется, проблема отделима и может быть расширена до 3 или более измерений.

Достаточно вычислить ширину перекрытия в измерении x и высоту перекрытия в измерении y и умножить их.

(Если прямоугольник не перекрывается в каком-то измерении, это значение равно 0)

Обнаружение перекрытия происходит путем сравнения значений min_x, max_x каждого прямоугольника:

 <------>  <------->   vs.  <-----> <----->
 a      b  c       d        c     d a     b
 Thus if b<=c OR a>=d, then no overlapping length = 0

 <------------->   or   <------------->
 a    <---->   b        a       <------------->
      c    d                    c     b       d
 + the 2 symmetric cases (swap ab & cd)

Из последних строк конечная точка общей области составляет минимум из d & b; Начальной точкой общей области является максимум a и c.

Тогда общая площадь равна min(d,b) – max(a,c) – что, если это отрицательное значение? Ну, вы только что проверили условия в первой строке...

23.10.2012
  • Да, я хочу вычислить эту перекрывающуюся ширину и высоту, но как я могу это сделать? Не сказано, что они даже где-то пересекаются. 23.10.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..