¿Buena biblioteca de geometría en Python? [cerrado]

97

Estoy buscando una biblioteca buena y bien desarrollada para manipulaciones geométricas y evaluaciones en Python, como:

  • evaluar la intersección entre dos líneas en 2D y 3D (si está presente)
  • evaluar el punto de intersección entre un plano y una línea, o la línea de intersección entre dos planos
  • evaluar la distancia mínima entre una línea y un punto
  • encontrar lo ortonormal a un plano que pasa por un punto
  • rotar, trasladar, reflejar un conjunto de puntos
  • encontrar el ángulo diedro definido por cuatro puntos

Tengo un libro compendio para todas estas operaciones, y podría implementarlo pero desafortunadamente no tengo tiempo, así que disfrutaría de una biblioteca que lo haga. La mayoría de las operaciones son útiles para juegos, por lo que estoy seguro de que algunas de estas funcionalidades se pueden encontrar en bibliotecas de juegos, pero preferiría no incluir funcionalidades (como gráficos) que no necesito.

Alguna sugerencia ? Gracias

Stefano Borini
fuente
Si está bien con solo 2D, puede ver esto .
Pithikos

Respuestas:

35

Quizás eche un vistazo a SymPy .

John Y
fuente
2
Realmente no satisface mis requisitos, pero de hecho es un proyecto genial, así que acepto su respuesta como una sugerencia interesante también para el futuro (ya que SymPy tiene un módulo de geometría y una gran cantidad de desarrolladores)
Stefano Borini
1
2d solo tristemente. No es realmente un motor de geometría constructiva.
meawoppl
3
El módulo de geometría de SymPy también puede ser muy, muy lento. Dado que está diseñado para realizar operaciones matemáticas simbólicas, prefiere utilizar expresiones precisas sobre valores de coma flotante aproximados. Dada la cantidad de raíces cuadradas que suelen estar involucradas en los cálculos geométricos, puedes imaginar cómo esas expresiones se vuelven realmente grandes y muy lentas.
anochecer
3
La actualización a SymPy ahora también contiene bibliotecas 3D
control_fd
Gracias por esta respuesta. Estoy probando SymPy ahora mismo. El primer experimento pareció ser bastante lento de ejecutar, incluso para un objeto 2D simple. ¿Alguna idea de si es bueno para procesar geometría en tiempo real? Gracias.
Proyecto de ley
27

Shapely es un buen envoltorio de Python alrededor de la popular biblioteca GEOS .

A. Coady
fuente
6
Parece estar muy centrado en el manejo de datos GIS, en lugar de pura "geometría matemática" (por así decirlo)
Stefano Borini
2
Ciertamente ha sido creado para su uso por la comunidad GIS, sin embargo, ignora deliberadamente las proyecciones geográficas, lo que lo hace adecuado para su uso como una biblioteca de geometría euclidiana de propósito general. Lo uso mucho como tal en un proyecto de juego de computadora incipiente, y funciona bien.
Jonathan Hartley
15
lo que dice acerca de las geometrías 3D: "Se puede usar un tercer valor de coordenada z al construir instancias, pero no tiene ningún efecto en el análisis geométrico. Todas las operaciones se realizan en el plano xy".
sebpiq
3
El comentario anterior me tomó aproximadamente media hora de codificación para averiguarlo. Realmente bastante inquietante.
meawoppl
2
¿Por qué solo un voto negativo cuando la pregunta pide específicamente 3D?
Jamie Bull
14

Encontré que pyeuclid es un gran paquete simple de matemáticas euclidianas de propósito general. Aunque es posible que la biblioteca no contenga exactamente los problemas que mencionó, su infraestructura es lo suficientemente buena como para facilitar la escritura de estos por su cuenta.

Dov Grobgeld
fuente
10

CGAL también tiene enlaces de Python .

Agnel Kurian
fuente
3
El último lanzamiento fue en 2009 y parecen estar incompletos. ¿Alguien puede decir que los ha usado recientemente y que pueden hacer las cosas que se preguntan en la pregunta usando los enlaces?
BenjaminGolder
Sí, todas las uniones que encontré están incompletas, incluidas algunas de las ventajas reales como la geometría sólida constructiva. Además, la naturaleza de CGAL con muchas plantillas hace que sea difícil de envolver bien. En un proyecto propio ( Demakein ), estoy usando el módulo cffi y algunos trucos horribles para usar CGAL directamente desde Python, usando fragmentos de código C ++ en línea.
Paul Harrison
6

geometry-simple tiene clases Point Line Plane Movement en ~ 300 líneas, usando solo numpy; echar un vistazo.

denis
fuente
6

Realmente quiero una buena respuesta a esta pregunta, y las anteriores me dejaron insatisfecho. Sin embargo, me encontré con pythonocc que se ve muy bien, además de que carece de buenos documentos y todavía tengo algunos problemas con la instalación (aún no es compatible con pypi). La última actualización fue hace 4 días (19 de junio de 2011). Envuelve OpenCascade, que tiene un montón de geometría y funcionalidad de modelado. Desde el sitio web de pythonocc:

pythonOCC es un marco de desarrollo 3D CAD / CAE / PLM para el lenguaje de programación Python. Proporciona características tales como operaciones topológicas y geométricas avanzadas, intercambio de datos (STEP, IGES, importación / exportación STL), mallado 2D y 3D, simulación de cuerpo rígido, modelado paramétrico.

[EDITAR: Ahora descargué pythonocc y comencé a trabajar con algunos de los ejemplos]

Creo que puede realizar todas las tareas mencionadas, pero me pareció poco intuitivo de usar. Se crea casi en su totalidad a partir de contenedores SWIG y, como resultado, la introspección de los comandos se vuelve difícil.

BenjaminGolder
fuente
En mi opinión, hace demasiado ... ¿deberíamos empezar uno? Pronto necesitaré muchas operaciones de geometría en mi raytracer, y probablemente tenga sentido crear un github separado para él. Ya tengo algo de código, no empezamos desde cero, pero será fácil de rediseñar si descubrimos que no es lo suficientemente bueno.
Stefano Borini
@Stefano Borini: ¡claro! Estaría feliz de ayudar en todo lo que pueda, pero no estoy ni cerca de su nivel de calificación.
BenjaminGolder
Estoy igualmente decepcionado con lo que está disponible. Para cosas simples, hice mi propio código (por ejemplo, en Adolphus ), pero esta noche, por ejemplo, necesito una intersección poliedro-poliedro y está a demasiados pasos de lo que tengo para estar cuerdo. En cualquier caso, si esto sigue adelante, cuenten conmigo.
ezod
¿Este proyecto nació?
Mermoz
1
@Mermoz sí, pero muy lentamente. Stefano ya ha comenzado a trabajar en la biblioteca y yo he estado escribiendo mis propias adiciones, pero no hemos ido muy lejos. ver github.com/stefanoborini/python-geometry y github.com/bengolder/python-geometry
BenjaminGolder
2

Puede que le interese el módulo de Python SpaceFuncs del proyecto OpenOpt, http://openopt.org

SpaceFuncs es una herramienta para el modelado geométrico 2D, 3D, N-dimensional con posibilidades de cálculos parametrizados, optimización numérica y resolución de sistemas de ecuaciones geométricas.

usuario871016
fuente
2

Python Wild Magic es otro código envuelto de SWIG. Sin embargo, es una biblioteca de juegos, pero puede manipular el archivo de la biblioteca SWIG para excluir cualquier elemento gráfico no deseado de la API de Python.

Velimir Mlaker
fuente