Gute Geometriebibliothek in Python? [geschlossen]

97

Ich suche eine gute und gut entwickelte Bibliothek für geometrische Manipulationen und Auswertungen in Python, wie:

  • Bewerten Sie den Schnittpunkt zwischen zwei Linien in 2D und 3D (falls vorhanden).
  • Bewerten Sie den Schnittpunkt zwischen einer Ebene und einer Linie oder die Schnittlinie zwischen zwei Ebenen
  • Bewerten Sie den Mindestabstand zwischen einer Linie und einem Punkt
  • Finden Sie das Orthonormale zu einer Ebene, die durch einen Punkt verläuft
  • drehen, übersetzen, eine Reihe von Punkten spiegeln
  • Finden Sie den Diederwinkel, der durch vier Punkte definiert ist

Ich habe ein Kompendium für all diese Operationen und könnte es implementieren, aber leider habe ich keine Zeit, so dass ich mich über eine Bibliothek freuen würde, die dies tut. Die meisten Vorgänge sind für Spielzwecke nützlich, daher bin ich sicher, dass einige dieser Funktionen in Spielbibliotheken enthalten sind, aber ich würde es vorziehen, keine Funktionen (wie Grafiken) einzuschließen, die ich nicht benötige.

Irgendwelche Vorschläge ? Vielen Dank

Stefano Borini
quelle
Wenn Sie fein sind mit nur 2D , dann können Sie überprüfen diese .
Pithikos

Antworten:

35

Vielleicht werfen Sie einen Blick auf SymPy .

John Y.
quelle
2
Es erfüllt meine Anforderungen nicht wirklich, aber es ist in der Tat ein cooles Projekt, daher akzeptiere ich Ihre Antwort als interessanten Vorschlag auch für die Zukunft (da SymPy ein Geometriemodul und eine große Anzahl von Entwicklern hat)
Stefano Borini
1
2d nur traurig. Nicht wirklich eine konstruktive Geometrie-Engine.
Meawoppl
3
Das Geometriemodul von SymPy kann auch sehr, sehr langsam sein. Da es für symbolische Mathematik ausgelegt ist, werden präzise Ausdrücke gegenüber ungefähren Gleitkommawerten bevorzugt. Angesichts der Anzahl der Quadratwurzeln, die normalerweise an geometrischen Berechnungen beteiligt sind, können Sie sich vorstellen, wie diese Ausdrücke sehr groß und sehr langsam werden.
Dusktreader
3
Das Update auf SymPy enthält jetzt auch 3D-Bibliotheken
control_fd
Danke für diese Antwort. Ich probiere gerade SymPy aus. Das erste Experiment schien ziemlich langsam durchzuführen - selbst für ein einfaches 2D-Objekt. Irgendeine Idee, ob es für die Verarbeitung von Geometrie in Echtzeit gut ist? Vielen Dank.
Bill
27

Shapely ist ein netter Python-Wrapper um die beliebte GEOS- Bibliothek.

A. Coady
quelle
6
Scheint eher auf den Umgang mit GIS-Daten als auf reine "mathematische Geometrie" (sozusagen) konzentriert zu sein
Stefano Borini
2
Es wurde sicherlich für die Verwendung durch die GIS-Community erstellt, kennt jedoch geografische Projektionen bewusst nicht, weshalb es sich gut als universelle euklidische Geometriebibliothek eignet. Ich benutze es stark als solches in einem aufkommenden Computerspielprojekt und es funktioniert gut.
Jonathan Hartley
15
Was es über 3D-Geometrien sagt: "Ein dritter Z-Koordinatenwert kann beim Erstellen von Instanzen verwendet werden, hat jedoch keine Auswirkung auf die geometrische Analyse. Alle Operationen werden in der xy-Ebene ausgeführt."
Sebpiq
3
Der obige Kommentar dauerte ungefähr eine halbe Stunde, um es herauszufinden. Wirklich ziemlich aufgeregt.
Meawoppl
2
Warum nur eine Abstimmung, wenn die Frage speziell nach 3D fragt?
Jamie Bull
14

Ich fand, dass Pyeuclid ein großartiges einfaches euklidisches Allzweck-Mathematikpaket ist. Obwohl die Bibliothek möglicherweise nicht genau die von Ihnen erwähnten Probleme enthält, ist ihre Infrastruktur gut genug, um es einfach zu machen, diese selbst zu schreiben.

Dov Grobgeld
quelle
10

CGAL hat auch Python-Bindungen .

Agnel Kurian
quelle
3
Die letzte Veröffentlichung war 2009 und sie scheinen unvollständig zu sein. Kann jemand sagen, dass er sie kürzlich benutzt hat und dass er die in der Frage gestellten Dinge mit den Bindungen tun kann?
BenjaminGolder
Ja, alle Bindungen, die ich gefunden habe, sind unvollständig, einschließlich einiger wirklicher Extras wie konstruktiver Volumengeometrie. Außerdem macht es die hohe Templat-Natur von CGAL schwierig, gut zu verpacken. In einem eigenen Projekt ( Demakein ) verwende ich das cffi-Modul und einige schreckliche Hacks, um CGAL direkt aus Python mit Inline-C ++ - Snippets zu verwenden.
Paul Harrison
6

Geometrie-einfach hat Klassen Punkt Linie Ebene Bewegung in ~ 300 Linien, wobei nur numpy verwendet wird; Schau mal.

denis
quelle
6

Ich möchte wirklich eine gute Antwort auf diese Frage, und die oben genannten haben mich unzufrieden gemacht. Ich bin jedoch gerade auf Pythonocc gestoßen, das großartig aussieht, abgesehen davon, dass es keine guten Dokumente gibt und ich immer noch Probleme mit der Installation habe (noch nicht pypi-kompatibel). Das letzte Update war vor 4 Tagen (19. Juni 2011). Es umfasst OpenCascade mit einer Vielzahl von Geometrie- und Modellierungsfunktionen. Von der Pythonocc-Website:

pythonOCC ist ein 3D-CAD / CAE / PLM-Entwicklungsframework für die Programmiersprache Python. Es bietet Funktionen wie erweiterte topologische und geometrische Operationen, Datenaustausch (STEP, IGES, STL-Import / Export), 2D- und 3D-Vernetzung, Starrkörpersimulation und parametrische Modellierung.

[BEARBEITEN: Ich habe jetzt Pythonocc heruntergeladen und einige Beispiele durchgearbeitet]

Ich glaube, dass es alle genannten Aufgaben ausführen kann, aber ich fand es nicht intuitiv zu bedienen. Es wird fast ausschließlich aus SWIG-Wrappern erstellt, und infolgedessen wird die Selbstbeobachtung der Befehle schwierig.

BenjaminGolder
quelle
Meiner Meinung nach macht es zu viel ... sollten wir eine starten? Ich werde bald viele Geometrieoperationen in meinem Raytracer benötigen, und es ist wahrscheinlich sinnvoll, einen separaten Github dafür zu erstellen. Ich habe bereits Code, wir fangen nicht bei Null an, aber es wird einfach sein, ihn neu zu gestalten, wenn wir herausfinden, dass er nicht gut genug ist.
Stefano Borini
@ Stefano Borini: sicher! Ich würde gerne helfen, so gut ich kann, aber ich bin bei weitem nicht in der Nähe Ihres Qualifikationsniveaus.
Benjamin
Ich bin ähnlich enttäuscht von dem, was verfügbar ist. Für einfache Dinge habe ich meinen eigenen Code erstellt (z. B. in Adolphus ), aber heute Abend brauche ich zum Beispiel einen Polyeder-Polyeder-Schnittpunkt und es sind einfach zu viele Schritte von dem entfernt, was ich für vernünftig halten muss. In jedem Fall, wenn dies vorwärts geht, zählen Sie mich in.
Ezod
Ist dieses Projekt entstanden?
Mermoz
1
@Mermoz ja, aber sehr langsam. Stefano hat bereits den Anfang in der Bibliothek gemacht, und ich habe meine eigenen Ergänzungen geschrieben, aber wir sind nicht sehr weit gegangen. siehe github.com/stefanoborini/python-geometry und github.com/bengolder/python-geometry
BenjaminGolder
2

Möglicherweise interessieren Sie sich für das Python-Modul SpaceFuncs aus dem OpenOpt-Projekt. http://openopt.org

SpaceFuncs ist ein Werkzeug für die geometrische 2D-, 3D- und N-dimensionale Modellierung mit Möglichkeiten für parametrisierte Berechnungen, numerische Optimierung und Lösungssysteme für geometrische Gleichungen

user871016
quelle
2

Python Wild Magic ist ein weiterer SWIG-Code. Es ist jedoch eine Spielebibliothek, aber Sie können die SWIG-Bibliotheksdatei so bearbeiten, dass unerwünschte Grafiken von der Python-API ausgeschlossen werden.

Velimir Mlaker
quelle