2012-12-02 9 views
13

Hey, ich habe gerade ein schnelles Programm geschrieben und da ist etwas passiert, wo ich einen Kreis für die Kollisionserkennung brauche. Aber soweit ich weiß, gibt es nur die Rectangle-Klasse, die die .interseects (Point p) -Methode hat. Gibt es so etwas wie einen Kreis, den ich genauso benutzen könnte?Gibt es in Java eine Kreisklasse wie die Rectangle-Klasse?

+0

Nicht, dass ich weiß. – duffymo

+1

Sie können [Eclipse2D] (http://docs.oracle.com/javase/7/docs/api/java/awt/geom/Ellipse2D.html) verwenden, das 'enthält (x, y)'. – Vulcan

+1

Ja, ich dachte neulich, dass Oracle uns allen einen schlechten Dienst erwiesen hätte, indem wir keine Dodekaeder-Klasse in die Standard-Bibliotheken aufgenommen hätten :-) – paxdiablo

Antwort

16

Es gibt eine Klasse namens Ellipse2D in der java.awt.geom Paket, das Sie verwenden können, da es einige Methoden hat, die zu sein scheinen, was Sie suchen. Eine Ellipse mit einer Breite gleich ihrer Höhe ist ein Kreis.

Einer der Überlastungen für contains können Sie für Kreis-Punkt-Kollisionen testen:

boolean contains(double x, double y) 

Tests, wenn die angegebenen Koordinaten innerhalb der Grenze des sind Shape, wie sie in der Definition von Innenhaftigkeit beschrieben .

Eine weitere Funktion namens intersects Sie Kreis-Rechteck Kollisionen testen können:

boolean intersects(double x, double y, double w, double h) 

Prüft, ob das Innere des Shape das Innere eines bestimmten rechteckigen Bereich schneidet.

Beachten Sie, dass Ellipse2D eine abstrakte Klasse ist; Sie würden eine der geschachtelten Unterklassen Ellipse2D.Double oder Ellipse2D.Float verwenden. Der einzige Unterschied ist der Datentyp, der zum Speichern der Dimensionen verwendet wird.

+0

+1, aber die geeignetere Methode für den Schnittpunkt ist 'enthält (double x, double y)'. – Vulcan

+0

Perfekt, vielen Dank – user1871085

1

java.awt.Shape too. und alle die Klasse, die es implementiert: Arc2D, Arc2D.Double, Arc2D.Float, Fläche, BasicTextUI.BasicCaret, CubicCurve2D, CubicCurve2D.Double, CubicCurve2D.Float, DefaultCaret, Ellipse2D, Ellipse2D. Double, Ellipse2D.Float, GeneralPath, Line2D, Line2D.Double, Line2D.Float, Path2D, Path2D.Double, Path2D.Float, Polygon, QuadCurve2D, QuadCurve2D.Double, QuadCurve2D.Float, Rectangle, Rectangle2D, Rectangle2D.Double, Rectangle2D. Float, RectangularShape, RoundRectangle2D, RoundRectangle2D.Double, RoundRectangle2D.Float

Verwandte Themen