Хобрук: Ваш путь к мастерству в программировании

Java - проверьте, не сталкиваются ли 4 точки (образующие прямоугольник) с другими 4 точками

Я создаю генератор подземелий Roguelike, и часть этого включает в себя проверку того, «сталкивается ли» комната (которая представлена ​​​​x1, y1, x2, y2) с другой комнатой. Если это так, комната будет восстановлена. Я немного пробовал гуглить, но пока не нашел ничего, что работает. Вот некоторый код, основанный на том, что я нашел в Интернете, но он всегда возвращает true.

public static boolean isInside(int minX1, int minY1, int maxX1, int maxY1, int minX2, int minY2, int maxX2, int maxY2) {
    if(Math.abs(minX1 - minX2) < (minX1 + maxX1) + (minX2 + maxX2)) {
        if(Math.abs(minY1 - minY2) < (minY1 + maxY1) + (minY2 + maxY2)) {
            return true;
        }
    }
    return false;
}

Спасибо за чтение!

11.01.2016

  • Комнаты квадратные на сетке xy? 11.01.2016
  • @TungstenX Комнаты прямоугольные 11.01.2016
  • Приношу свои извинения, я имел в виду, стены комнаты следуют сетке xy, например, [] или они могут быть диагональными \\? 11.01.2016
  • @TungstenX Ах, все комнаты соответствуют сетке x, y. Диагонали нет :) 11.01.2016
  • Возможный дубликат stackoverflow.com/questions/17157785/ 11.01.2016

Ответы:


1

Вы можете использовать метод intersects() в классе Rectangle:

https://docs.oracle.com/javase/8/docs/api/java/awt/Rectangle.html#intersects-java.awt.Rectangle-

11.01.2016

2

Я проверяю, находится ли вершина прямоугольника внутри другого прямоугольника.

if ((minX1 <= minX2 <= maxX1 || minX1 <= maxX2 <= maxX1 ) && (minY1 <= minY2 <= maxY1 || minY1 <= maxY2 <= maxY1))
return true;
11.01.2016
Новые материалы

Управление состоянием в микрофронтендах
Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..

Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

Структуры данных в C ++ - Часть 1
Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

Как я опубликовал свое первое приложение в App Store в 13 лет
Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..

Что в лицо
Очерк о возвращении физиогномики и о том, почему мы должны это приветствовать. История начинается со странной науки. Р. Тора Бьорнсдоттир, Николас О. Рул. Видимость социального класса по..

Почему шаблоны проектирования и почему нет?
Сложность — мать всех проблем в программировании. Программное обеспечение должно быть разработано с точки зрения того, кто его поддерживает, а не того, кто его пишет, потому что программное..

Создание дизайна обуви с помощью машинного обучения
Обувь. Что подождать? Я думал, что речь пойдет о машинном обучении! Ну это так. Если бы вы пошли на Amazon, сколько обуви вы бы нашли? Наверное, много, не так ли? Но много ли в них..