-1

さまざまな形状を移動できるプログラムがあります。2 つの形状が交差している場合に true を返すブール値を返すことができるようにしたいと考えています。これは私がこれまでに持っているものです:

   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);
   }

...ここで、path は GeneralPath です (MyShape を除いて、これらはすべて API から直接取得されます)。

私が確信していないことの 1 つは、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 を返すことです。いつ/なぜ true が返されるのかはわかりませんが、非常にまれです。

4

1 に答える 1

2

2番目に試したのは、実は正解でした。ただ明確にします:

public boolean overlaps(OverlappableSceneShape s){
  Rectangle2D.Double otherShapeBoundary
     = new Rectangle2D.Double(s.getX(), s.getY(), s.getWidth(), s.getHeight());
  return path.intersects(otherShapeBoundary);
}
  • 交点を決定する最良の方法です。
于 2012-01-15T01:14:36.713 に答える