2010-01-22 8 views
29

¿Hay alguna biblioteca de geometría disponible para Java? Estoy buscando una solución para obtener un punto (s) de intersección entre dos objetos geométricos.Biblioteca de geometría para Java

+2

¿Cuáles son las dimensiones del espacio que está trabajando? 2D, 3D? –

+0

2D ............. – nanda

+5

¿Tema secundario? Vas a estar bromeando. Vamos a cerrar todas las preguntas de Java entonces. – Stepan

Respuesta

31

JTS es su mejor opción de fuente abierta gratuita. El método que está buscando en JTS es here

En cuanto a las opciones comerciales, tiene ESRI's Java JNI version de su biblioteca de ArcObjects que tiene una Biblioteca de Geometría muy sólida. La interfaz en la biblioteca de ESRI se llama ITopologicalOperator

Si todo lo que intenta hacer son operaciones geométricas, JTS es su mejor opción: es una excelente biblioteca que tiene muchos puertos a diferentes idiomas. Si, por otro lado, está buscando un sistema GIS completo que haga una simbología compleja, soporte para flujos de trabajo GIS y edición multiusuario, impresión, etc., entonces comenzaría a buscar en las bibliotecas de ESRI.

+3

Enlace de Kendics perdidos: Nueva URL: http://tsusiatsoftware.net/jts/main.html – KarlP

+3

Una opción gratuita de Esri: https://github.com/Esri/geometry-api-java – 0kcats

+0

de acuerdo. En mi defensa, no existía en 2010 :) – rburhum

6

El paquete debe mirarlo java.awt.geom, que es parte del JDK.

En particular, consulte la clase java.awt.geom.Area, que le permite realizar operaciones de intersección entre dos Shape s.

EDITAR

Encontrar los puntos de intersección no es trivial por lo que yo sé, como es necesario aplicar un algoritmo diferente dependiendo de las formas que estamos analizando. Por ejemplo, el algoritmo para la intersección entre dos círculos se da here, mientras que el algoritmo para calcular la intrusión entre dos curvas Bezier es completamente diferente (here).

EDIT 2

Una sugerencia: Se podría buscar en la clase PathIterator, que devuelve una descripción de la trayectoria de una forma como una secuencia de segmentos. En particular, consulte FlatteningPathIterator, que colapsará cualquier curva en múltiples líneas rectas. Una vez que su camino se ha reducido a líneas rectas, el cálculo de los puntos de intersección será simple ... aunque obviamente esta es una aproximación en los casos en que su forma contiene curvas.

+0

pero los resultados solo son verdaderos/falsos. Necesito los puntos de intersección de los exactos – nanda

+0

comentario para EDITAR: hasta ahora sé, una vez que conocemos la ecuación de la ruta, es bastante sencillo obtener puntos de intersección. Tal vez termine creando la biblioteca si no hay una solución sofisticada. – nanda

+0

Ver mi segunda edición. – Adamski

6

para fines no GIS me puede sugerir javaGeom biblioteca. Utiliza la abstracción euclidiana de la geometría que la mayoría de la gente conoce de la escuela. No hay actividad reciente en este proyecto, pero me parece bien estructurado y fácil de usar.Dicen que admite operaciones booleanas, pero nunca probaron su funcionamiento. Existe una aplicación de pruebas muy rica en características llamada Euclid, desarrollada por el mismo autor. Puedes intentar usarlo, pero solo si estás seguro de que te va a funcionar.

http://sourceforge.net/projects/geom-java/

+0

Parece que tuvieron 3 lanzamientos a finales de 2011, después de un largo período de inactividad. Además, la biblioteca parece mucho más compacta que JTS, ¡es bueno no hinchar demasiado las cosas! – rescdsk

+0

marque [esta respuesta] (http://gamedev.stackexchange.com/a/114761/36681) también, encontré muchas alternativas –