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
Odpowiedz
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.
+1, ale bardziej odpowiednią metodą dla przecięcia punktów jest 'zawiera (podwójne x, podwójne y)'. – Vulcan
Doskonale, dziękuję bardzo – user1871085
Istnieje elipsa2D, czyli w ten sam sposób, w jaki kwadrat jest prostokątem, a kółko jest elipsą.
http://docs.oracle.com/javase/7/docs/api/java/awt/geom/Ellipse2D.html
Przekieruj swój link do API Java 7 dodaj Do góry zagłosuję (Java 1.4 ma prawie 10 lat: P) – MadProgrammer
Ahh dziękuję bardzo. Wypróbuję to. – user1871085
Zaktualizowany zgodnie z życzeniem. – ThePerson
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
Nie to, co wiem. – duffymo
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
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