Buona libreria di geometrie in Python? [chiuso]


97

Sto cercando una libreria buona e ben sviluppata per manipolazioni geometriche e valutazioni in Python, come:

  • valutare l'intersezione tra due linee in 2D e 3D (se presente)
  • valutare il punto di intersezione tra un piano e una linea o la linea di intersezione tra due piani
  • valutare la distanza minima tra una linea e un punto
  • trova l'ortonormale a un piano passante per un punto
  • ruota, trasla, rispecchia un insieme di punti
  • trova l'angolo diedro definito da quattro punti

Ho un libro di compendio per tutte queste operazioni e potrei implementarlo ma sfortunatamente non ho tempo, quindi mi piacerebbe una libreria che lo faccia. La maggior parte delle operazioni sono utili per scopi di gioco, quindi sono sicuro che alcune di queste funzionalità possono essere trovate nelle librerie di giochi, ma preferirei non includere funzionalità (come la grafica) di cui non ho bisogno.

Eventuali suggerimenti ? Grazie


Se stai bene solo con il 2D, puoi dare un'occhiata a questo .
Pithikos

Risposte:


35

Forse dai un'occhiata a SymPy .


2
Non soddisfa le mie esigenze, ma è davvero un bel progetto, quindi accetto la tua risposta come un suggerimento interessante anche per il futuro (dato che SymPy ha un modulo di geometria e una quantità enorme di sviluppatori)
Stefano Borini

1
Solo 2d purtroppo. Non proprio un motore di geometria costruttiva.
meawoppl

3
Il modulo di geometria di SymPy può anche essere molto, molto lento. Poiché è progettato per eseguire calcoli simbolici, preferisce utilizzare espressioni precise rispetto a valori in virgola mobile approssimativi. Data la quantità di radici quadrate che di solito sono coinvolte nei calcoli geometrici, puoi immaginare come queste espressioni diventino davvero grandi e molto lente.
dusktreader

3
L'aggiornamento a SymPy ora contiene anche le librerie 3D
control_fd

Grazie per questa risposta. Sto provando SymPy in questo momento. Il primo esperimento sembrava essere piuttosto lento da eseguire, anche per un semplice oggetto 2D. Qualche idea se è utile per elaborare la geometria in tempo reale? Grazie.
Fattura

27

Shapely è un simpatico wrapper Python attorno alla popolare libreria GEOS .


6
Sembra essere molto concentrato sulla gestione dei dati GIS, piuttosto che sulla pura "geometria matematica" (si fa per dire)
Stefano Borini

2
Certamente è stato creato per essere utilizzato dalla comunità GIS, tuttavia ignora deliberatamente le proiezioni geografiche, il che lo rende adatto per l'uso come libreria di geometria euclidea generica. Lo uso pesantemente come tale in un nascente progetto di gioco per computer e funziona bene.
Jonathan Hartley,

15
cosa dice sulle geometrie 3D: "Un terzo valore di coordinata z può essere utilizzato durante la costruzione di istanze, ma non ha effetto sull'analisi geometrica. Tutte le operazioni vengono eseguite sul piano xy."
sebpiq

3
Il commento sopra mi ha richiesto circa mezz'ora di programmazione per scoprirlo. Abbastanza agitante davvero.
meawoppl

2
Perché solo un voto negativo quando la domanda richiede specificamente il 3D?
Jamie Bull

14

Ho scoperto che pyeuclide è un ottimo pacchetto matematico euclideo generico. Anche se la libreria potrebbe non contenere esattamente i problemi che hai menzionato, la sua infrastruttura è abbastanza buona da rendere facile scriverli da soli.


10

3
L'ultima versione è stata nel 2009 e sembrano essere incompleti. Qualcuno può dire di averli usati di recente e che possono fare le cose richieste nella domanda usando gli attacchi?
BenjaminGolder

Sì, tutti gli attacchi che ho trovato sono incompleti, comprese alcune delle vere chicche come la geometria solida costruttiva. Inoltre, la natura altamente modellata di CGAL rende difficile avvolgere bene. In un mio progetto ( Demakein ), sto usando il modulo cffi e alcuni terribili hack per usare CGAL direttamente da python, usando frammenti C ++ inline.
Paul Harrison


6

Voglio davvero una buona risposta a questa domanda, e quelle sopra mi hanno lasciato insoddisfatto. Tuttavia, mi sono appena imbattuto in pythonocc che sembra fantastico, a parte la mancanza di buoni documenti e ancora qualche problema con l'installazione (non ancora compatibile con pypi). L'ultimo aggiornamento è stato di 4 giorni fa (19 giugno 2011). Avvolge OpenCascade che ha un sacco di geometria e funzionalità di modellazione. Dal sito web pythonocc:

pythonOCC è un framework di sviluppo CAD / CAE / PLM 3D per il linguaggio di programmazione Python. Fornisce funzionalità come operazioni topologiche e geometriche avanzate, scambio di dati (STEP, IGES, import / export STL), mesh 2D e 3D, simulazione di corpi rigidi, modellazione parametrica.

[EDIT: ora ho scaricato pythonocc e ho iniziato a lavorare su alcuni degli esempi]

Credo che possa eseguire tutte le attività menzionate, ma l'ho trovato poco intuitivo da usare. Viene creato quasi interamente da wrapper SWIG e, di conseguenza, l'introspezione dei comandi diventa difficile.


Secondo me fa troppo .... dovremmo avviarne uno? Presto avrò bisogno di molte operazioni di geometria nel mio raytracer e probabilmente ha senso creare un github separato per questo. Ho già del codice, non iniziamo da zero, ma sarà facile riprogettarlo se scopriremo che non è abbastanza buono.
Stefano Borini

@Stefano Borini: certo! Sarei felice di aiutarti comunque posso, ma non sono neanche lontanamente vicino al tuo livello di qualificazione.
BenjaminGolder

Allo stesso modo sono deluso da ciò che è disponibile. Per cose semplici, ho creato il mio codice (ad esempio in Adolphus ), ma stasera, ad esempio, ho bisogno dell'intersezione poliedro-poliedro ed è solo troppi passi da quello che devo essere sano di mente. In ogni caso, se va avanti,
contami

è nato questo progetto?
Mermoz

1
@ Mermoz sì, ma molto lentamente. Stefano è già entrato in biblioteca, e io ho scritto le mie aggiunte, ma non siamo andati molto lontano. vedi github.com/stefanoborini/python-geometry e github.com/bengolder/python-geometry
BenjaminGolder

2

Potresti essere interessato al modulo Python SpaceFuncs del progetto OpenOpt, http://openopt.org

SpaceFuncs è uno strumento per la modellazione geometrica 2D, 3D, N-dimensionale con possibilità di calcoli parametrizzati, ottimizzazione numerica e risoluzione di sistemi di equazioni geometriche


2

Python Wild Magic è un altro codice SWIG avvolto. È comunque una libreria di giochi, ma puoi manipolare il file della libreria SWIG per escludere qualsiasi elemento grafico indesiderato dall'API Python.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.