Как проверить пересечение Shape с помощью GeneralPath? Джава

У меня есть программа, которая позволяет вам перемещать различные фигуры. Я хочу иметь возможность вернуть логическое значение, которое возвращает истину, если две фигуры пересекаются. Это то, что я до сих пор:

   public boolean overlaps(MyShape s){
   Rectangle2D.Double otherShapeBoundary
         = new Rectangle2D.Double(s.getX(), s.getY(), s.getWidth(), s.getHeight());
   PathIterator pi = path.getPathIterator(null);
   return path.intersects(pi,otherShapeBoundary);
   }

... где путь - это GeneralPath (все они прямо из API, кроме MyShape).

В чем я не уверен, так это в том, как работает PathIterator, что может быть проблемой. Я также пробовал это, но я получаю похожую ошибку:

   public boolean overlaps(OverlappableSceneShape s){
   Rectangle2D.Double otherShapeBoundary
         = new Rectangle2D.Double(s.getX(), s.getY(), s.getWidth(), s.getHeight());
   return path.intersects(otherShapeBoundary);
   }

Ошибка в том, что этот метод почти всегда возвращает false. Я не уверен, когда / почему это возвращает истину, но это очень редко.

1 ответ

Решение

То, что я попробовал вторым, было на самом деле правильным ответом. Просто быть чистым:

public boolean overlaps(OverlappableSceneShape s){
  Rectangle2D.Double otherShapeBoundary
     = new Rectangle2D.Double(s.getX(), s.getY(), s.getWidth(), s.getHeight());
  return path.intersects(otherShapeBoundary);
}
  • это лучший метод определения пересечения.
Другие вопросы по тегам