Как я могу определить, какие прямоугольники имеют максимальное перекрытие с данным прямоугольником?

Я работаю над поиском максимального прямоугольника перекрытия.

Я пытался использовать следующие строки кода, но он возвращается с тем, что этот прямоугольник перекрывается другим или нет

public boolean isOverlapping(Rect r1, Rect r2) {
       if (r1.top < r2.top || r1.left > r2.left) {
           return false;
       }
       if (r1.width() < r2.width() || r1.height() > r2.height()) {
           return false;
       }
       return true;
   }

Я ожидаю, что прямоугольник 3 больше всего перекрывается с данным прямоугольником. Не список или количество прямоугольников, которые перекрываются с данным прямоугольником.

см. android.graphics.Rect документацию

pskink 15.05.2019 12:29

уже проверил то же самое, но не могу найти никакого полезного метода @pskink

Dharmesh Prajapati 15.05.2019 12:35

так что найди intersect

pskink 15.05.2019 12:36

уже сделано с этим public static boolean isCollisionDetected(Rect v1, Rect v2) { return Rect.intersects(v1, v2); }, но он не возвращает ожидаемый результат

Dharmesh Prajapati 15.05.2019 12:36

вы читали Rect#intersect документацию? если да, то что непонятно?

pskink 15.05.2019 13:11

он вернет только то, что прямоугольник 2 перекрывается с прямоугольником 1 или нет, и в моем случае у меня есть список прямоугольников, поэтому он вернет все перекрывающиеся прямоугольники, но мне нужен только максимальный перекрывающийся прямоугольник

Dharmesh Prajapati 15.05.2019 13:17

поэтому вам нужно перебрать свой список и найти максимум

pskink 15.05.2019 13:18

Я просто застрял в поиске максимума из этого списка

Dharmesh Prajapati 15.05.2019 13:50

выложи свой код тогда

pskink 15.05.2019 14:06
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
9
140
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Немного псевдокода для начала:

for each rect in Rectangle list
  overlap = compuateOverlap(rect, givenRect)

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

Если вам нужны дополнительные рекомендации по вычислению этого перекрытия, посмотрите этот отвечать для вдохновения.

Или здесь, там вы найдете даже точную формулу для вычисления площади перекрытия двух прямоугольников!

@DharmeshPrajapati Спасибо за возвращение. И, пожалуйста, рассмотрите возможность удаления ненужных комментариев, чтобы будущие читатели могли сосредоточиться на техническом содержании ;-)

GhostCat 16.05.2019 08:13

Другие вопросы по теме