Perpustakaan geometri yang bagus dengan python? [Tutup]

97

Saya mencari perpustakaan yang bagus dan berkembang dengan baik untuk manipulasi dan evaluasi geometris dengan python, seperti:

  • mengevaluasi perpotongan antara dua garis dalam 2D ​​dan 3D (jika ada)
  • mengevaluasi titik perpotongan antara bidang dan garis, atau garis perpotongan antara dua bidang
  • mengevaluasi jarak minimum antara garis dan titik
  • temukan ortonormal ke pesawat yang melewati suatu titik
  • memutar, menerjemahkan, mencerminkan sekumpulan poin
  • temukan sudut dihedral yang ditentukan oleh empat titik

Saya memiliki buku ringkasan untuk semua operasi ini, dan saya dapat mengimplementasikannya tetapi sayangnya saya tidak punya waktu, jadi saya akan menikmati perpustakaan yang melakukannya. Sebagian besar operasi berguna untuk tujuan bermain game, jadi saya yakin beberapa fungsi ini dapat ditemukan di perpustakaan game, tetapi saya lebih suka tidak menyertakan fungsi (seperti grafik) yang tidak saya perlukan.

Ada saran? Terima kasih

Stefano Borini
sumber
Jika Anda baik-baik saja dengan hanya 2D maka Anda dapat melihat ini .
Pithikos

Jawaban:

35

Mungkin lihat SymPy .

John Y
sumber
2
Itu tidak benar-benar memenuhi persyaratan saya, tetapi ini memang proyek yang keren, jadi saya menerima jawaban Anda sebagai saran yang menarik juga untuk masa depan (karena SymPy memiliki modul geometri, dan sejumlah besar pengembang)
Stefano Borini
1
2d hanya sedih. Bukan mesin geometri yang konstruktif.
meawoppl
3
Modul geometri SymPy juga bisa sangat, sangat lambat. Karena dirancang untuk melakukan matematika simbolis, ia lebih suka menggunakan ekspresi yang tepat daripada perkiraan nilai titik mengambang. Mengingat jumlah akar kuadrat yang biasanya terlibat dalam perhitungan geometris, Anda dapat membayangkan bagaimana ekspresi tersebut menjadi sangat besar dan sangat lambat.
dusktreader
3
Pembaruan ke SymPy sekarang berisi pustaka 3D juga
control_fd
Terima kasih atas jawaban ini. Saya mencoba SymPy sekarang. Eksperimen pertama tampaknya berjalan cukup lambat - bahkan untuk objek 2D sederhana. Adakah ide bagus untuk memproses geometri secara real time? Terima kasih.
Tagihan
27

Shapely adalah pembungkus python yang bagus di sekitar perpustakaan GEOS yang populer .

A. Coady
sumber
6
Tampaknya sangat fokus pada penanganan data GIS, bukan murni "geometri matematika" (boleh dikatakan begitu)
Stefano Borini
2
Ini pasti telah dibuat untuk digunakan oleh komunitas GIS, namun sengaja mengabaikan proyeksi geografis, yang membuatnya baik untuk digunakan sebagai pustaka geometri euclidean untuk keperluan umum. Saya sering menggunakannya dalam proyek game komputer yang baru lahir, dan berfungsi dengan baik.
Jonathan Hartley
15
apa yang dikatakannya tentang geometri 3D: "Nilai koordinat z ketiga dapat digunakan saat membuat instance, tetapi tidak berpengaruh pada analisis geometris. Semua operasi dilakukan dalam bidang xy."
sebpiq
3
Komentar di atas membutuhkan waktu sekitar setengah jam coding untuk mengetahuinya. Cukup mengganggu kok.
meawoppl
2
Mengapa hanya satu suara negatif jika pertanyaannya secara khusus meminta 3D?
Jamie Bull
14

Saya menemukan pyeuclid menjadi paket matematika euclidean umum sederhana yang bagus. Meskipun perpustakaan mungkin tidak berisi persis masalah yang Anda sebutkan, infrastrukturnya cukup baik untuk membuatnya mudah untuk menulisnya sendiri.

Dov Grobgeld
sumber
10

CGAL juga memiliki binding Python .

Agnel Kurian
sumber
3
Rilisan terakhir adalah tahun 2009, dan tampaknya tidak lengkap. Adakah yang bisa mengatakan bahwa mereka telah menggunakannya baru-baru ini, dan bahwa mereka dapat melakukan hal-hal yang ditanyakan dalam pertanyaan menggunakan binding?
BenjaminGolder
Ya, semua binding yang saya temukan tidak lengkap, termasuk beberapa hal nyata seperti geometri solid yang membangun. Selain itu, sifat CGAL yang sangat bertemplat membuatnya sulit untuk dibungkus dengan baik. Dalam proyek saya sendiri ( Demakein ), saya menggunakan modul cffi dan beberapa peretasan hebat untuk menggunakan CGAL langsung dari python, menggunakan cuplikan C ++ inline.
Paul Harrison
6

geometry-simple memiliki kelas Point Line Plane Movement dalam ~ 300 baris, hanya menggunakan numpy; Lihatlah.

denis
sumber
6

Saya benar-benar ingin jawaban yang bagus untuk pertanyaan ini, dan pertanyaan di atas membuat saya tidak puas. Namun, saya baru saja menemukan pythonocc yang terlihat bagus, selain kekurangan dokumen yang bagus dan masih mengalami masalah dengan instalasi (belum kompatibel dengan pypi). Pembaruan terakhir adalah 4 hari yang lalu (19 Juni 2011). Ini membungkus OpenCascade yang memiliki banyak fungsi geometri dan pemodelan. Dari situs pythonocc:

pythonOCC adalah kerangka kerja pengembangan CAD / CAE / PLM 3D untuk bahasa pemrograman Python. Ini menyediakan fitur seperti operasi topologi dan geometris lanjutan, pertukaran data (LANGKAH, IGES, impor / ekspor STL), meshing 2D dan 3D, simulasi benda kaku, pemodelan parametrik.

[EDIT: Sekarang saya telah mengunduh pythonocc dan mulai mengerjakan beberapa contoh]

Saya percaya itu dapat melakukan semua tugas yang disebutkan, tetapi saya merasa tidak intuitif untuk digunakan. Itu dibuat hampir seluruhnya dari pembungkus SWIG, dan akibatnya, introspeksi perintah menjadi sulit.

BenjaminGolder
sumber
Menurut saya, itu membuat terlalu banyak .... haruskah kita memulainya? Saya akan membutuhkan banyak operasi geometri di raytracer saya segera, dan mungkin masuk akal untuk membuat github terpisah untuknya. Saya sudah memiliki beberapa kode, kami tidak memulai dari awal, tetapi akan mudah untuk mendesain ulang jika kami menemukan itu tidak cukup baik.
Stefano Borini
@Stefano Borini: tentu! Saya akan dengan senang hati membantu sebisa saya, tetapi saya tidak mendekati tingkat kualifikasi Anda.
BenjaminGolder
Saya juga kecewa dengan apa yang tersedia. Untuk hal-hal sederhana, saya telah membuat kode saya sendiri (misalnya di Adolphus ), tetapi malam ini, misalnya, saya perlu persimpangan polihedron-polihedron dan itu terlalu banyak langkah dari apa yang saya harus waras. Bagaimanapun, jika ini berlanjut, hitung saya masuk
ezod
apakah proyek ini terlahir?
Mermoz
1
@Mermoz ya, tapi sangat lambat. Stefano telah memulai perpustakaannya, dan saya telah menulis tambahan saya sendiri, tetapi kami belum melangkah terlalu jauh. lihat github.com/stefanoborini/python-geometry dan github.com/bengolder/python-geometry
BenjaminGolder
2

Anda mungkin tertarik dengan modul Python SpaceFuncs dari proyek OpenOpt, http://openopt.org

SpaceFuncs adalah alat untuk pemodelan geometris 2D, 3D, N-dimensi dengan kemungkinan penghitungan parametrized, pengoptimalan numerik, dan penyelesaian sistem persamaan geometris.

pengguna871016
sumber
2

Python Wild Magic adalah kode yang dibungkus SWIG. Namun ini adalah perpustakaan game, tetapi Anda dapat memanipulasi file perpustakaan SWIG untuk mengecualikan hal-hal grafik yang tidak diinginkan dari Python API.

Velimir Mlaker
sumber