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?
Antwort
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.
+1, aber die geeignetere Methode für den Schnittpunkt ist 'enthält (double x, double y)'. – Vulcan
Perfekt, vielen Dank – user1871085
Es gibt eine ellipse2D, das ist in der gleichen Weise, dass ein Quadrat ein Rechteck ist, ein Kreis eine Ellipse ist.
http://docs.oracle.com/javase/7/docs/api/java/awt/geom/Ellipse2D.html
Leite deinen Link zur Java 7 API um Ich werde dich abstimmen (Java 1.4 ist fast 10 Jahre alt: P) – MadProgrammer
Ahh vielen Dank. Ich werde das hier ausprobieren. – user1871085
Aktualisiert wie angefordert. – ThePerson
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
Nicht, dass ich weiß. – duffymo
Sie können [Eclipse2D] (http://docs.oracle.com/javase/7/docs/api/java/awt/geom/Ellipse2D.html) verwenden, das 'enthält (x, y)'. – Vulcan
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