Implementando Polygon2D en Java 2D

Estoy creando un juego 2D en Java usando la biblioteca Java2D para dibujar, y realmente necesito un objeto Polígono de precisión flotante que pueda usar tanto para dibujar objetos del juego como para detectar colisiones en ellos. Desafortunadamente, el objeto Polygon de Java viene solo en precisión int, y no hay un Polygon2D equivalente, como ocurre con Rectangle y Rectangle2D. Ya he investigado lo suficiente como para ver que tengo algunas opciones, pero ninguna de ellas me parece muy buena.

Utilice Path2D. De acuerdo con un desarrollador de Java que publica eneste foro, la falta de Polygon2D fue un descuido, pero su reemplazo sugerido es Path2D. Desafortunadamente, Path2D no proporciona una forma de acceder a sus vértices o bordes individuales, que necesito para realizar la detección de colisiones (específicamente, necesito obtener un vector ortogonal para cada borde).

Implementar mi propio Polygon2D. que implementa la interfaz Shape para que todavía pueda pasarla aGraphics2D.draw(Shape). Esto parece que sería bastante difícil. La interfaz Shape requiere métodos difíciles de implementar comocontains(Rectangle2D) ygetPathIterator(AffineTransform). porgetPathIterator en particular, parece que para implementarlo necesitaría devolver un objeto de tipo PathIterator, pero no hay implementaciones concretas de la interfaz de PathIterator disponibles en los paquetes públicos de AWT.

Envolver Path2D en un objeto que "recuerda" los vértices individuales y los proporciona al cliente. Esto me funcionó cuando necesitaba un Área que recordara las formas de sus componentes: lo envolví en una clase CompoundShape que implementó la interfaz de Forma y reenvió todos los métodos de Forma a la implementación de ellos por parte del Área, mientras mantenía un registro de cada Forma que se agregó al Área en un ArrayList. El problema con esto es que si hago un seguimiento de los vértices individuales en dos matrices defloatPor lo tanto, no hay forma de exponerlos al usuario sin la posibilidad de que cambien los vértices, y dado que eso ocurriría por el acceso directo a la matriz, la Path2D interna no recibiría notificaciones de los cambios.

Copiar Polygon.java. El código fuente real de la clase Polygon de Java está disponible en grepcode.com, y simplemente podría reemplazar el vértice relacionadoints confloats en todo para obtener un Polygon2D. Desafortunadamente, cuando probé esto, la líneaimport sun.awt.geom.Crossings; lanzó un error de compilación que decía "No se puede acceder al tipo de cruces debido a la restricción en la biblioteca C: \ Archivos de programa \ Java \ jre7 \ lib \ rt.jar". De acuerdo aesta pregunta eso sucede porque el acuerdo de licencia de Sun le impide reemplazar las clases principales de Java con las suyas propias, pero Polygon no intenta hacerlo; simplemente crea un objeto de tipo sun.awt.geom.Crossings, no se realiza ninguna sustitución ni extensión, y yo Me aseguré de poner mi copia de Polygon en un paquete que no se llame "java".

¿Cuál es la mejor manera de proceder con esto? Apreciaría sugerencias sobre cómo hacer que una de estas opciones funcione o una idea para otra opción que no tenga los problemas que estos encuentran.

Respuestas a la pregunta(3)

Su respuesta a la pregunta