2012-12-02 35 views
13

Hej, pisałem szybki program i coś natknęło się na miejsce, w którym muszę użyć okręgu do wykrywania kolizji. Ale o ile mi wiadomo, istnieje tylko klasa Rectangle, która ma metodę .intersects (Point p). Czy jest coś w rodzaju koła, które mógłbym użyć w ten sam sposób?Czy w Java jest klasa okręgu, jak klasa Rectangle

+0

Nie to, co wiem. – duffymo

+1

Możesz użyć [Eclipse2D] (http://docs.oracle.com/javase/7/docs/api/java/awt/geom/Ellipse2D.html), który zawiera 'zawiera (x, y)'. – Vulcan

+1

Tak, właśnie myślałem, że pewnego dnia Oracle uczyniło nas wszystkich nieuczciwymi, nie uwzględniając klasy dwunastościanu w standardowych bibliotekach :-) – paxdiablo

Odpowiedz

16

Istnieje klasa o nazwie Ellipse2D w java.awt.geom pakiet, którego można użyć, ponieważ ma kilka metod, które wydają się być tym, czego szukasz. Elipsa o szerokości równej wysokości to okrąg.

Jednym z przeciążeniem dla contains pozwala testować kolizji okrąg-punktowych:

boolean contains(double x, double y) 

Testy jeśli podane współrzędne są wewnątrz granicy Shape, jak opisano w definicji insideness .

Kolejna funkcja nazywa intersects pozwala testować kolizji prostokąt koło-:

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

Testy jeśli wnętrze Shape przecina wnętrze określonym obszarze prostokątnym.

Należy pamiętać, że Ellipse2D jest klasą abstrakcyjną; użyjesz jednej z jego podklas zagnieżdżonych Ellipse2D.Double lub Ellipse2D.Float, jedyną różnicą jest typ danych używany do przechowywania wymiarów.

+0

+1, ale bardziej odpowiednią metodą dla przecięcia punktów jest 'zawiera (podwójne x, podwójne y)'. – Vulcan

+0

Doskonale, dziękuję bardzo – user1871085

1

java.awt.Shape too. i cała klasa, która implementuje go: Arc2D, Arc2D.Double, Arc2D.Float, część, BasicTextUI.BasicCaret, CubicCurve2D, CubicCurve2D.Double, CubicCurve2D.Float, DefaultCaret, Ellipse2D, Ellipse2D. Podwójne, Ellipse2D.Float, GeneralPath, Line2D, Line2D.Double, Line2D.Float, Path2D, Path2D.Double, Path2D.Float, Polygon, QuadCurve2D, QuadCurve2D.Double, QuadCurve2D.Float, Rectangle, Rectangle2D, Rectangle2D.Double, Rectangle2D. Pływak, prostokątnykształt, RoundRectangle2D, RoundRectangle2D.Double, RoundRectangle2D.Float