Dobra biblioteka geometrii w Pythonie? [Zamknięte]

97

Szukam dobrej i dobrze rozwiniętej biblioteki do manipulacji geometrycznych i ocen w Pythonie, takich jak:

  • ocenić przecięcie dwóch linii w 2D i 3D (jeśli są obecne)
  • ocenić punkt przecięcia płaszczyzny z linią lub linię przecięcia dwóch płaszczyzn
  • oszacować minimalną odległość między linią a punktem
  • znajdź ortonormalną do płaszczyzny przechodzącej przez punkt
  • obróć, przesuń, odbij zestaw punktów
  • znajdź kąt dwuścienny określony przez cztery punkty

Mam kompendium wszystkich tych operacji i mógłbym to zaimplementować, ale niestety nie mam czasu, więc cieszyłbym się biblioteką, która to robi. Większość operacji jest przydatna do celów związanych z grami, więc jestem pewien, że niektóre z tych funkcji można znaleźć w bibliotekach gier, ale wolałbym nie włączać funkcji (takich jak grafika), których nie potrzebuję.

Jakieś sugestie ? Dzięki

Stefano Borini
źródło
Jeśli są w porządku tylko 2D następnie można sprawdzić to .
Pithikos,

Odpowiedzi:

36

Może spójrz na SymPy .

John Y
źródło
2
Nie spełnia moich wymagań, ale to naprawdę fajny projekt, więc przyjmuję twoją odpowiedź jako ciekawą sugestię również na przyszłość (ponieważ SymPy ma moduł geometrii i ogromną liczbę programistów)
Stefano Borini
1
2d tylko niestety. Niezbyt konstruktywny silnik geometrii.
meawoppl
3
Moduł geometrii SymPy może być również bardzo, bardzo powolny. Ponieważ jest przeznaczony do wykonywania obliczeń symbolicznych, woli używać precyzyjnych wyrażeń zamiast przybliżonych wartości zmiennoprzecinkowych. Biorąc pod uwagę liczbę pierwiastków kwadratowych, które są zwykle używane w obliczeniach geometrycznych, możesz sobie wyobrazić, jak te wyrażenia stają się naprawdę duże i bardzo wolne.
dusktreader
3
Aktualizacja do SymPy zawiera teraz również biblioteki 3D
control_fd
Dzięki za tę odpowiedź. Wypróbowuję teraz SymPy. Pierwszy eksperyment wydawał się być dość powolny do wykonania - nawet dla prostego obiektu 2D. Masz jakiś pomysł, czy jest dobry do przetwarzania geometrii w czasie rzeczywistym? Dzięki.
Bill
27

Shapely to ładne opakowanie Pythona wokół popularnej biblioteki GEOS .

A. Coady
źródło
6
Wydaje się być bardzo skoncentrowany na obsłudze danych GIS, a nie na czystej „geometrii matematycznej” (że tak powiem)
Stefano Borini.
2
Z pewnością została stworzona do użytku przez społeczność GIS, jednak celowo nie zna rzutów geograficznych, co sprawia, że ​​nadaje się do użytku jako biblioteka geometrii euklidesowej ogólnego przeznaczenia. Używam go intensywnie jako takiego w rodzącym się projekcie gry komputerowej i działa dobrze.
Jonathan Hartley,
15
co mówi o geometrii 3D: „Trzecia wartość współrzędnej z może być użyta podczas konstruowania instancji, ale nie ma ona wpływu na analizę geometryczną. Wszystkie operacje są wykonywane w płaszczyźnie xy”.
sebpiq
4
Powyższy komentarz zajął mi około pół godziny kodowania, aby się dowiedzieć. Naprawdę dość poruszające.
meawoppl
2
Dlaczego tylko jeden głos przeciw, gdy pytanie dotyczy konkretnie 3D?
Jamie Bull
14

Uważam, że pyeuclid jest świetnym, prostym pakietem do matematyki euklidesowej ogólnego przeznaczenia. Chociaż biblioteka może nie zawierać dokładnie tych problemów, o których wspomniałeś, jej infrastruktura jest wystarczająco dobra, aby ułatwić pisanie ich samodzielnie.

Dov Grobgeld
źródło
10

CGAL ma również powiązania Pythona .

Agnel Kurian
źródło
3
Ostatnia wersja miała rok 2009 i wydaje się być niekompletna. Czy ktoś może powiedzieć, że ostatnio ich używali i że mogą robić rzeczy zadane w pytaniu za pomocą wiązań?
BenjaminGolder
Tak, wszystkie znalezione wiązania są niekompletne, w tym niektóre z prawdziwych gadżetów, takich jak konstruktywna geometria brył. Ponadto wysoce szablonowy charakter CGAL sprawia, że ​​trudno go dobrze owinąć. W moim własnym projekcie ( Demakein ) używam modułu cffi i kilku okropnych sztuczek, aby używać CGAL bezpośrednio z Pythona, używając wbudowanych fragmentów C ++.
Paul Harrison,
6

geometry-simple ma klasy Point Line Plane Movement w ~ 300 liniach, używając tylko numpy; Spójrz.

denis
źródło
6

Naprawdę chcę dobrej odpowiedzi na to pytanie, a te powyżej pozostawiły mnie niezadowolone. Jednak właśnie natknąłem się na pythonocc, który wygląda świetnie, poza brakiem dobrej dokumentacji i nadal mam problemy z instalacją (jeszcze nie jest kompatybilny z pypi). Ostatnia aktualizacja miała miejsce 4 dni temu (19 czerwca 2011). Owija OpenCascade który ma mnóstwo geometrii i funkcjonalności modelowania. Ze strony internetowej pythonocc:

pythonOCC to platforma programistyczna 3D CAD / CAE / PLM dla języka programowania Python. Zapewnia takie funkcje, jak zaawansowane operacje topologiczne i geometryczne, wymiana danych (STEP, IGES, import / eksport STL), siatkowanie 2D i 3D, symulacja ciała sztywnego, modelowanie parametryczne.

[EDYCJA: Pobrałem teraz pythonocc i zacząłem pracować nad niektórymi przykładami]

Uważam, że może wykonać wszystkie wymienione zadania, ale okazało się, że jest nieintuicyjny w użyciu. Jest tworzony prawie w całości z opakowań SWIG, w wyniku czego introspekcja poleceń staje się trudna.

BenjaminGolder
źródło
Moim zdaniem to za dużo… czy powinniśmy zacząć? Wkrótce będę potrzebował wielu operacji geometrycznych w moim raytracerze i prawdopodobnie ma sens utworzenie dla niego osobnego githuba. Mam już kod, nie zaczynamy od zera, ale łatwo będzie go przeprojektować, jeśli okaże się, że nie jest wystarczająco dobry.
Stefano Borini
@Stefano Borini: jasne! Chętnie pomogę, jak tylko będę mógł, ale nie jestem blisko twojego poziomu kwalifikacji.
BenjaminGolder
Jestem podobnie rozczarowany tym, co jest dostępne. Do prostych rzeczy stworzyłem własny kod (np. W Adolphusie ), ale dziś wieczorem potrzebuję przecięcia wielościan-wielościan i to po prostu zbyt wiele kroków od tego, na co muszę być przy zdrowych zmysłach. W każdym razie, jeśli to pójdzie do przodu,
zalicz
czy ten projekt narodził się?
Mermoz
1
@Mermoz tak, ale bardzo powoli. Stefano już zrobił początek w bibliotece, a ja pisałem własne dodatki, ale nie zaszliśmy zbyt daleko. patrz github.com/stefanoborini/python-geometry i github.com/bengolder/python-geometry
BenjaminGolder
2

Możesz być zainteresowany modułem Pythona SpaceFuncs z projektu OpenOpt, http://openopt.org

SpaceFuncs to narzędzie do modelowania geometrycznego 2D, 3D, N-wymiarowego z możliwością parametryzacji obliczeń, optymalizacji numerycznej i rozwiązywania układów równań geometrycznych

user871016
źródło
2

Python Wild Magic to kolejny opakowany w SWIG kod. Jest to jednak biblioteka gier, ale można manipulować plikiem biblioteki SWIG, aby wykluczyć niepożądane elementy graficzne z interfejsu API Pythona.

Velimir Mlaker
źródło