2009-07-02 19 views
75

Busco a una biblioteca bien y bien desarrollada para las manipulaciones geométricas y evaluaciones en pitón, como:¿Buena biblioteca de geometría en python?

  • 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 de
  • encontrar la ortonormal a un plano que pasa por un punto
  • rotate, traducir , Reflejar un conjunto de puntos
  • encontrar el ángulo diedro definido por cuatro puntos

Tengo un libro compendio de todas estas operaciones, y pude poner en práctica, pero por desgracia no tengo tiempo, así que me gustaría disfrutar de una biblioteca que lo hace. 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 las bibliotecas de juegos, pero preferiría no incluir funcionalidades (como gráficos) que no necesito.

¿Alguna sugerencia? Gracias

+0

Si está bien solo con 2D, entonces puede ver [esto] (https://github.com/Pithikos/python-rectangles). – Pithikos

Respuesta

28

Quizás eche un vistazo a SymPy.

+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) –

+1

2d solo tristemente. No es realmente un motor de geometría constructiva. – meawoppl

+2

El módulo de geometría de SymPy también puede ser muy, muy lento. Dado que está diseñado para hacer matemática simbólica, prefiere usar expresiones precisas sobre valores de coma flotante aproximados. Dada la cantidad de raíces cuadradas que generalmente están involucradas en los cálculos geométricos, puedes imaginar cómo esas expresiones se vuelven realmente grandes y muy lentas. – dusktreader

26

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

+4

Parece estar muy centrado en el manejo de datos GIS, en lugar de pura "geometría matemática" (por así decirlo) –

+2

Sin duda ha sido creado para ser utilizado por la comunidad GIS, sin embargo ignora deliberadamente las proyecciones geográficas, lo que lo hace adecuado para usar como una biblioteca de geometría euclidiana de propósito general. Lo uso mucho como tal en un proyecto de videojuego naciente, y funciona bien. –

+0

Ah, advertencia: estoy usando Shapely en 2D, no puedo responder por sus habilidades en 3D. –

10

CGAL tiene Python bindings también.

+1

La última versión fue 2009, y parecen estar incompletas. ¿Alguien puede decir que los ha usado recientemente, y que pueden hacer las cosas que se le preguntan en la pregunta usando los enlaces? – BenjaminGolder

+0

Debo admitir: no sé. –

+0

Sí, todas las encuadernaciones que he encontrado son incompletas, incluidas algunas de las cosas buenas, como la geometría sólida constructiva. Además, la naturaleza altamente personalizada de CGAL hace que sea difícil de envolver bien. En un proyecto propio ([Demakein] (http://pypi.python.org/pypi/demakein)), estoy usando el módulo cffi y algunos hacks horribles para usar CGAL directamente desde python, usando C++ en línea fragmentos. –

6

geometry-simple tiene clases Movimiento de plano de línea de punto en ~ 300 líneas, usando solo numpy; echar un vistazo.

11

Encontré pyeuclid para ser un gran paquete euclidiano matemático de propósito general simple. Aunque es posible que la biblioteca no contenga exactamente los problemas que usted mencionó, su infraestructura es lo suficientemente buena como para facilitar la escritura de los mismos.

5

Realmente quiero una buena respuesta a esta pregunta, y las de arriba me dejaron insatisfecho. Sin embargo, me encontré con pythonocc que se ve muy bien, además de carecer de buenos documentos y todavía tener algunos problemas con la instalación (aún no compatible con pypi). La última actualización fue hace 4 días (19 de junio de 2011). Envuelve OpenCascade que tiene una gran cantidad 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 funciones tales como operaciones topológicas y geométricas avanzadas, intercambio de datos (STEP/IGES, importación/exportación de STL), mallado 2D y 3D, simulación de cuerpo rígido, modelado paramétrico.

[EDIT: Ahora he descargado pythonocc y empecé a trabajar a través de algunos de los ejemplos]

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

+0

En mi opinión, hace demasiado ... ¿Deberíamos comenzar uno? Necesitaré muchas operaciones de geometría en mi raytracer pronto, y probablemente tenga sentido crear un github separado para ello. Ya tengo un código, no empezamos de cero, pero será fácil rediseñar si descubrimos que no es lo suficientemente bueno. –

+0

@Stefano Borini: ¡seguro!Estaré encantado de ayudarte como pueda, pero no estoy cerca de tu nivel de calificación. – BenjaminGolder

+0

Estoy igualmente decepcionado con lo que está disponible. Para cosas simples, hice mi propio código (por ejemplo, en [Adolphus] (https://github.com/ezod/adolphus)), pero esta noche, por ejemplo, necesito intersección de poliedro-poliedro y son demasiados pasos por lo que tengo que estar cuerdo. En cualquier caso, si esto sigue adelante, cuénteme. – ezod

1

Usted puede estar interesado en Python SpaceFuncs módulo de proyecto OpenOpt, http://openopt.org

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

1

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

Cuestiones relacionadas