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


Jeśli są w porządku tylko 2D następnie można sprawdzić to .
Pithikos,

Odpowiedzi:


36

Może spójrz na SymPy .


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 .


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.


10

CGAL ma również powiązania Pythona .


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

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.


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


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.