Bonne bibliothèque de géométrie en python? [fermé]

97

Je recherche une bonne bibliothèque bien développée pour les manipulations géométriques et les évaluations en python, comme:

  • évaluer l'intersection entre deux lignes en 2D et 3D (si présente)
  • évaluer le point d'intersection entre un plan et une ligne, ou la ligne d'intersection entre deux plans
  • évaluer la distance minimale entre une ligne et un point
  • trouver l'orthonormal à un plan passant par un point
  • faire pivoter, traduire, mettre en miroir un ensemble de points
  • trouver l'angle dièdre défini par quatre points

J'ai un recueil pour toutes ces opérations, et je pourrais l'implémenter mais malheureusement je n'ai pas le temps, donc j'apprécierais une bibliothèque qui le fasse. La plupart des opérations sont utiles à des fins de jeu, donc je suis sûr que certaines de ces fonctionnalités peuvent être trouvées dans les bibliothèques de jeux, mais je préférerais ne pas inclure de fonctionnalités (telles que des graphiques) dont je n'ai pas besoin.

Aucune suggestion ? Merci

Stefano Borini
la source
Si vous êtes d'accord avec seulement 2D, vous pouvez vérifier ceci .
Pithikos

Réponses:

36

Jetez peut-être un coup d'œil à SymPy .

John Y
la source
2
Cela ne répond pas vraiment à mes exigences, mais c'est en effet un projet cool, donc j'accepte votre réponse comme une suggestion intéressante également pour l'avenir (car SymPy a un module de géométrie et une énorme quantité de développeurs)
Stefano Borini
1
2d malheureusement. Pas vraiment un moteur de géométrie constructive.
meawoppl
3
Le module de géométrie de SymPy peut également être très, très lent. Comme il est conçu pour faire des mathématiques symboliques, il préfère utiliser des expressions précises plutôt que des valeurs approximatives en virgule flottante. Compte tenu de la quantité de racines carrées généralement impliquées dans les calculs géométriques, vous pouvez imaginer comment ces expressions deviennent vraiment volumineuses et très lentes.
dusktreader
3
La mise à jour vers SymPy contient désormais également des bibliothèques 3D
control_fd
Merci pour cette réponse. J'essaye SymPy en ce moment. La première expérience semblait être assez lente à exécuter - même pour un simple objet 2D. Une idée si c'est bon pour traiter la géométrie en temps réel? Merci.
Projet de loi du
27

Shapely est un joli wrapper python autour de la bibliothèque GEOS populaire .

A. Coady
la source
6
Semble être très concentré sur la gestion des données SIG, plutôt que sur la pure «géométrie mathématique» (pour ainsi dire)
Stefano Borini
2
Il a certainement été créé pour être utilisé par la communauté SIG, mais il ignore délibérément les projections géographiques, ce qui le rend parfait pour une utilisation comme bibliothèque de géométrie euclidienne à usage général. Je l'utilise beaucoup en tant que tel dans un projet de jeu vidéo naissant, et cela fonctionne très bien.
Jonathan Hartley le
15
ce qu'il dit à propos des géométries 3D: "Une troisième valeur de coordonnée z peut être utilisée lors de la construction d'instances, mais n'a aucun effet sur l'analyse géométrique. Toutes les opérations sont effectuées dans le plan xy."
sebpiq
4
Le commentaire ci-dessus m'a pris environ une demi-heure de codage pour le découvrir. Assez agitant vraiment.
meawoppl
2
Pourquoi un seul vote négatif alors que la question porte spécifiquement sur la 3D?
Jamie Bull
14

J'ai trouvé que pyeuclid était un excellent package mathématique euclidien simple et général. Bien que la bibliothèque ne contienne pas exactement les problèmes que vous avez mentionnés, son infrastructure est suffisamment bonne pour vous permettre de les écrire facilement.

Dov Grobgeld
la source
10

CGAL a également des liaisons Python .

Agnel Kurian
la source
3
La dernière version date de 2009 et semble incomplète. Quelqu'un peut-il dire qu'il les a utilisés récemment et qu'il peut faire les choses demandées dans la question en utilisant les liaisons?
BenjaminGolder
Oui, toutes les liaisons que j'ai trouvées sont incomplètes, y compris certains des vrais avantages comme la géométrie solide constructive. En outre, la nature hautement modélisée de CGAL rend difficile un bon emballage. Dans mon propre projet ( Demakein ), j'utilise le module cffi et quelques horribles hacks pour utiliser CGAL directement à partir de python, en utilisant des extraits de code C ++ en ligne.
Paul Harrison
6

geometry-simple a des classes Point Line Plane Movement dans ~ 300 lignes, en utilisant uniquement numpy; regarde.

denis
la source
6

Je veux vraiment une bonne réponse à cette question, et celles ci-dessus m'ont laissé insatisfait. Cependant, je viens de tomber sur pythonocc qui a fière allure, en plus de manquer de bons documents et d'avoir encore des problèmes d'installation (pas encore compatible pypi). La dernière mise à jour remonte à 4 jours (19 juin 2011). Il enveloppe OpenCascade qui a une tonne de fonctionnalités de géométrie et de modélisation. Sur le site Web de pythonocc:

pythonOCC est un framework de développement 3D CAD / CAE / PLM pour le langage de programmation Python. Il fournit des fonctionnalités telles que les opérations topologiques et géométriques avancées, l'échange de données (STEP, IGES, import / export STL), le maillage 2D et 3D, la simulation de corps rigides, la modélisation paramétrique.

[EDIT: J'ai maintenant téléchargé pythonocc et j'ai commencé à travailler sur certains des exemples]

Je pense qu'il peut effectuer toutes les tâches mentionnées, mais je l'ai trouvé peu intuitif à utiliser. Il est créé presque entièrement à partir de wrappers SWIG, et par conséquent, l'introspection des commandes devient difficile.

BenjaminGolder
la source
À mon avis, cela fait trop ... faut-il en créer un? J'aurai bientôt besoin de nombreuses opérations de géométrie dans mon raytracer, et il est probablement logique de créer un github séparé pour celui-ci. J'ai déjà du code, nous ne partons pas de zéro, mais il sera facile de le repenser si nous découvrons que ce n'est pas assez bon.
Stefano Borini
@Stefano Borini: bien sûr! Je serais heureux de vous aider comme je le peux, mais je suis loin de votre niveau de qualification.
BenjaminGolder
Je suis également déçu de ce qui est disponible. Pour des trucs simples, j'ai fait mon propre code (par exemple dans Adolphus ), mais ce soir, par exemple, j'ai besoin d'une intersection polyèdre-polyèdre et c'est juste trop d'étapes de ce que je dois être sain d'esprit. Dans tous les cas, si cela va de l'avant, comptez-moi.
ezod
ce projet est-il né?
Mermoz
1
@Mermoz oui, mais très lentement. Stefano a déjà fait le début de la bibliothèque, et j'ai écrit mes propres ajouts, mais nous ne sommes pas allés très loin. voir github.com/stefanoborini/python-geometry et github.com/bengolder/python-geometry
BenjaminGolder
2

Vous pourriez être intéressé par le module Python SpaceFuncs du projet OpenOpt, http://openopt.org

SpaceFuncs est un outil de modélisation géométrique 2D, 3D, N-dimensionnelle avec des possibilités de calculs paramétrés, d'optimisation numérique et de résolution de systèmes d'équations géométriques

user871016
la source
2

Python Wild Magic est un autre code enveloppé SWIG. Il s'agit cependant d'une bibliothèque de jeux, mais vous pouvez manipuler le fichier de bibliothèque SWIG pour exclure tout élément graphique indésirable de l'API Python.

Velimir Mlaker
la source