Python'da iyi bir geometri kitaplığı? [kapalı]


97

Python'da geometrik manipülasyonlar ve değerlendirmeler için iyi ve iyi geliştirilmiş bir kitaplık arıyorum, örneğin:

  • 2D ve 3D'de iki çizgi arasındaki kesişimi değerlendirin (varsa)
  • bir düzlem ile bir çizgi arasındaki kesişme noktasını veya iki düzlem arasındaki kesişme çizgisini değerlendirin
  • bir doğru ile bir nokta arasındaki minimum mesafeyi değerlendirin
  • Bir noktadan geçen bir düzleme ortonormali bul
  • bir dizi noktayı döndürme, çevirme, yansıtma
  • dört nokta ile tanımlanan dihedral açıyı bulun

Tüm bu işlemler için bir özet kitabım var ve uygulayabilirim ama maalesef vaktim yok, bu yüzden bunu yapan bir kütüphaneden hoşlanırım. İşlemlerin çoğu oyun amaçları için kullanışlıdır, bu nedenle bu işlevlerden bazılarının oyun kitaplıklarında bulunabileceğinden eminim, ancak ihtiyacım olmayan işlevleri (grafikler gibi) eklememeyi tercih ederim.

Herhangi bir öneri ? Teşekkürler


2D sadece ince ise o zaman kontrol edebilirsiniz bu .
Pithikos

Yanıtlar:


36

Belki SymPy'ye bir göz atın .


2
Gereksinimlerimi gerçekten karşılamıyor, ama gerçekten harika bir proje, bu yüzden cevabınızı gelecek için de ilginç bir öneri olarak kabul ediyorum (SymPy'de bir geometri modülü ve çok sayıda geliştirici olduğu için)
Stefano Borini

1
2d sadece ne yazık ki. Gerçekten yapıcı bir geometri motoru değil.
meawoppl

3
SymPy'nin geometri modülü de çok çok yavaş olabilir. Sembolik matematik yapmak için tasarlandığından, yaklaşık kayan nokta değerleri yerine kesin ifadeler kullanmayı tercih eder. Genellikle geometrik hesaplamalarda yer alan karekök miktarı göz önüne alındığında, bu ifadelerin nasıl gerçekten büyüdüğünü ve çok yavaşladığını hayal edebilirsiniz.
dusktreader

3
SymPy güncellemesi artık 3D kitaplıkları da içeriyor
control_fd

Bu cevap için teşekkürler. Şu anda SymPy'yi deniyorum. İlk deney basit bir 2D nesne için bile oldukça yavaştı. Geometriyi gerçek zamanlı olarak işlemek için iyi olup olmadığı hakkında bir fikriniz var mı? Teşekkürler.
Bill

27

Shapely , popüler GEOS kütüphanesinin etrafında güzel bir python sarmalayıcısıdır .


6
Çok (tabiri caizse) oldukça saf "matematiksel geometri" den, taşıma CBS verilerine odaklanmış olması gibi görünüyor
Stefano Borini

2
Kesinlikle CBS topluluğu tarafından kullanılmak üzere yaratılmıştır, ancak kasıtlı olarak coğrafi projeksiyonlardan habersizdir, bu da onu genel amaçlı bir öklid geometri kitaplığı olarak kullanmak için iyi kılar. Yeni ortaya çıkan bir bilgisayar oyunu projesinde yoğun bir şekilde kullanıyorum ve iyi çalışıyor.
Jonathan Hartley

15
3B geometriler hakkında söyledikleri: "Örnekler oluştururken üçüncü bir z koordinat değeri kullanılabilir, ancak geometrik analiz üzerinde hiçbir etkisi yoktur. Tüm işlemler xy düzleminde gerçekleştirilir."
sebpiq

4
Yukarıdaki yorum, öğrenmek için yaklaşık yarım saat kodlama aldı. Gerçekten oldukça heyecanlı.
meawoppl

2
Soru özellikle 3B istediğinde neden yalnızca bir olumsuz oy?
Jamie Bull

14

Pyeuclid'i çok basit, genel amaçlı bir öklid matematik paketi olarak buldum . Kütüphane tam olarak bahsettiğiniz sorunları içermese de, altyapısı bunları kendi başınıza yazmanızı kolaylaştıracak kadar iyidir.


10

3
Son sürüm 2009'du ve eksik görünüyorlar. Herhangi biri onları son zamanlarda kullandıklarını ve soruda sorulan şeyleri bağlamaları kullanarak yapabileceklerini söyleyebilir mi?
BenjaminGolder

Evet, bulduğum tüm bağlamalar, yapıcı katı geometri gibi gerçek güzellikler de dahil olmak üzere eksik. Ayrıca, CGAL'ın oldukça şablonlu yapısı, iyi sarmayı zorlaştırır. Kendi projemde ( Demakein ), CGAL'i doğrudan python'dan, satır içi C ++ parçacıkları kullanarak kullanmak için cffi modülünü ve bazı korkunç hack'leri kullanıyorum.
Paul Harrison

6

geometry-simple , sadece numpy kullanarak ~ 300 satırlık Point Line Plane Movement sınıflarına sahiptir; Bir göz at.


6

Bu soruya gerçekten iyi bir cevap istiyorum ve yukarıdakiler beni tatmin etmedi. Bununla birlikte, iyi dokümantasyon eksikliği ve hala kurulumla ilgili bazı sorunlar (henüz pypi uyumlu değil) dışında harika görünen pythonocc ile karşılaştım. Son güncelleme 4 gün önceydi (19 Haziran 2011). Bir ton geometri ve modelleme işlevine sahip OpenCascade'i sarar . Pythonocc web sitesinden:

pythonOCC, Python programlama dili için bir 3D CAD / CAE / PLM geliştirme çerçevesidir. Gelişmiş topolojik ve geometrik işlemler, veri alışverişi (STEP, IGES, STL içe / dışa aktarma), 2D ve 3D ağ oluşturma, rijit gövde simülasyonu, parametrik modelleme gibi özellikler sağlar.

[DÜZENLEME: Şimdi pythonocc'yi indirdim ve bazı örnekler üzerinde çalışmaya başladım]

Bahsedilen tüm görevleri yerine getirebileceğine inanıyorum, ancak kullanımının sezgisel olmadığını gördüm. Neredeyse tamamen SWIG sarmalayıcılarından oluşturulur ve sonuç olarak komutların iç gözlemi zorlaşır.


Bence çok şey yapıyor .... bir tane başlatmalı mıyız? Yakında ışın izleyicimde birçok geometri işlemine ihtiyacım olacak ve bunun için ayrı bir github oluşturmak muhtemelen mantıklı olacaktır. Zaten bir kodum var, sıfırdan başlamıyoruz, ancak yeterince iyi olmadığını anlarsak yeniden tasarlamak kolay olacak.
Stefano Borini

@Stefano Borini: Elbette! Elimden geldiğince yardımcı olmaktan mutluluk duyarım, ancak yeterlilik seviyenize yakın değilim.
BenjaminGolder

Mevcut olanlardan da benzer şekilde hayal kırıklığına uğradım. Basit şeyler için, kendi kodumu yaptım (örneğin, Adolphus'ta ), ancak bu gece, örneğin, çokyüzlü-çokyüzlü kesişimine ihtiyacım var ve aklı başında olmam gereken şeyden sadece çok fazla adım var. Her halükarda, eğer bu ileri giderse, beni de sayın.
ezod

bu proje doğdu mu?
Mermoz

1
@Mermoz evet, ama çok yavaş. Stefano kitaplığın başlangıcını çoktan yaptı ve ben de kendi eklemelerimi yazıyorum, ancak çok ileri gitmedik. bkz. github.com/stefanoborini/python-geometry ve github.com/bengolder/python-geometry
BenjaminGolder

2

Http://openopt.org OpenOpt projesinden Python modülü SpaceFuncs ilginizi çekebilir

SpaceFuncs, geometrik denklemlerin parametrize hesaplama, sayısal optimizasyon ve çözme sistemleriyle 2D, 3D, N-boyutlu geometrik modelleme aracıdır.


2

Python Wild Magic başka bir SWIG sarılı koddur. Bununla birlikte, bir oyun kitaplığıdır, ancak SWIG kitaplık dosyasını, istenmeyen grafikleri Python API'sinden hariç tutmak için değiştirebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.