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
risposta
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.
+1, ma il metodo più appropriato per l'intersezione del punto è 'contains (double x, double y)'. – Vulcan
Perfetto, grazie mille – user1871085
C'è un ellipse2D, questo è nello stesso modo in cui un quadrato è un rettangolo un cerchio è un'ellisse.
http://docs.oracle.com/javase/7/docs/api/java/awt/geom/Ellipse2D.html
Reindirizza il tuo link all'aggiunta dell'API Java 7 Vado a votare (Java 1.4 ha quasi 10 anni: P) – MadProgrammer
Ahh grazie mille. Proverò questo fuori. – user1871085
Aggiornato come richiesto. – ThePerson
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
Non che io sappia. – duffymo
È possibile utilizzare [Eclipse2D] (http://docs.oracle.com/javase/7/docs/api/java/awt/geom/Ellipse2D.html), che contiene '(x, y)'. – Vulcan
Sì, stavo pensando proprio l'altro giorno che Oracle ci avesse fatto un disservizio non includendo una classe dodecaedro nelle librerie standard :-) – paxdiablo