2012-12-02 4 views
13

Ehi, stavo scrivendo un programma rapido e qualcosa mi è venuto in mente dove ho bisogno di usare un cerchio per il rilevamento delle collisioni. Ma per quanto ne so, c'è solo la classe Rectangle che ha il metodo .intersects (Point p). C'è qualcosa come un cerchio che potrei usare allo stesso modo?Esiste una classe circle in Java come la classe Rectangle

+0

Non che io sappia. – duffymo

+1

È possibile utilizzare [Eclipse2D] (http://docs.oracle.com/javase/7/docs/api/java/awt/geom/Ellipse2D.html), che contiene '(x, y)'. – Vulcan

+1

Sì, stavo pensando proprio l'altro giorno che Oracle ci avesse fatto un disservizio non includendo una classe dodecaedro nelle librerie standard :-) – paxdiablo

risposta

16

C'è una classe chiamata Ellipse2D nel java.awt.geom pacchetto che è possibile utilizzare, dal momento che ha alcuni metodi che sembra essere quello che stai cercando. Un'ellisse con una larghezza uguale alla sua altezza è un cerchio.

Uno dei sovraccarichi per contains consente di testare collisioni cerchio punti:

boolean contains(double x, double y) 

test se le coordinate specificate sono all'interno del confine del Shape, come descritto nella definizione di interiorità .

Un'altra funzione chiamata intersects consente di testare collisioni cerchio rettangolo:

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

Prove se l'interno del Shape interseca l'interno di un'area rettangolare specificata.

Nota che Ellipse2D è una classe astratta; si utilizzerà una delle sottoclassi nidificate Ellipse2D.Double o Ellipse2D.Float, con la sola differenza del tipo di dati utilizzato per memorizzare le dimensioni.

+0

+1, ma il metodo più appropriato per l'intersezione del punto è 'contains (double x, double y)'. – Vulcan

+0

Perfetto, grazie mille – user1871085

1

java.awt.Shape too. e tutta la classe che implementa: Arc2D, Arc2D.Double, Arc2D.Float, Area, 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