Как проверить пересечение Shape с помощью GeneralPath?Джава - PullRequest
0 голосов
/ 28 ноября 2011

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

   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 Ответ

2 голосов
/ 15 января 2012

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

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