Scikit-geometriye giriş

Python ekosisteminde kullanışlı geometrik türlere sahip bir kitaplık yok – bunu scikit-geometri ekleyerek düzeltmeyi amaçlıyoruz. Bu yeni kitaplık Nokta, Çizgi, Işın ve Çokgen gibi temel türleri uygular ve kesişimler, genişlemeler, iç iskeletler vb. Gibi geometrik özellikleri hesaplamak için işlevler içerir.

Bir robotik araştırmacısı olarak (ve aynı zamanda diğer pek çok alanda) geometrik ilkellerle ilgili hesaplamalar çok sık kullanılıyor – ancak güzel bir Python kitaplığında doğru soyutlamaları bulmak beklenenden daha zor. C ++ ekosistemi, temel geometrik türleri çok güzel bir şekilde uygulayan çok olgun bir kitaplığa sahiptir: Hesaplamalı Geometri Algoritmaları Kitaplığı. scikit-geometry, harika pybind11 sayesinde birçok CGAL türünün etrafında güzel sarmalayıcılara sahip bir Python kitaplığıdır.

Depo GitHub https://github.com/scikit-geometry/scikit-geometry adresinde bulunabilir ve dokümanlar şu adrestedir: http://scikit-geometry.github.io/scikit-geometry/

Bazı temel türler şunlardır:

‘nin hayal edebileceği gibi, bu türler, her türden geometriyi tanımlamak ve özellikleri sorgulamak veya kesişimleri veya diğer algoritmalar.

Aşağıdaki örnek, tüm ikili kesişimleri bulmak için geometrik temelleri kullanmanın ne kadar kolay olduğunu gösterir. Scikit-geometri kitaplığı, draw işlevini (matplotlib’in üstünde uygulanmıştır) kullanarak geometrik türleri kolayca çizme işlevi de sunar.

Python’da Çokgenler

scikit-geometride son derece kullanışlı bir başka tür de Poligon ’tur. Çokgenlerle veya delikli çokgenlerle (dış ve iç sınırları olan bir çokgen) çalışan scikit-geometride birçok işlevselliğe sahibiz. Çokgenler NumPy dizilerinden oluşturulabilir ve noktalar coords erişimcisi kullanılarak NumPy dizisi olarak okunabilir.

Ya da öteleme veya iç içe çokgenleri hesaplamak için düz iskelet yöntemlerini kullanabilirsiniz (delikli çokgenlerle de çalışır).

Robotikte çok yararlı olan bir başka işlev de, 2B düzenlemelerin görünürlüğünü hesaplamaktır. Görünürlük, engelsiz alan olarak tanımlanır (görünür 2D, bir noktadan itibaren poligonal alan).

Çokgen basitleştirme, basitleştirme modülünde uygulanır (ve isteğe bağlı olarak, önemli bir özellik olan, örneğin haritaların kontur çizgileri için topolojiyi koruyan topoloji olabilir).

Ve çok daha fazlası…

scikit-geometri ayrıca Voronoi diyagramını, dışbükey gövdeyi, sınırlayıcı kutuları, iki poligonun minkowski toplamını, hızlı en yakın komşu sorguları için bir AABB ağacını ve geometrik hesaplamalar için diğer birçok yararlı aracı hesaplama işlevleriyle birlikte gelir. çok daha fazlasını ekleyin!

scikit-geometry ayrıca C ++ tarafında CGAL çok duyarlıklı sayı türünü kullanır, böylece kesişim hesaplamaları doğru kalır ve kayan nokta yuvarlama veya bölmelerden kaynaklanan herhangi bir hata olmaz.

Mevcut kitaplıklarla karşılaştırma

Orada zaten geometrik ilkelleri işlemek için bazı kitaplıklar var, ancak hepsinin eksik olduğunu gördük:

Bu kitaplıklarla karşılaştırıldığında scikit-geometry, hesaplamalı geometri için Python’da doğal olan ve hızlı performans sunan daha kapsamlı bir araç seti sunmaya çalışır. Vektörize edilmiş işlemlerden hâlâ yoksunuz (yine de bunlar bir NumPy dizisine scikit-geometri nesneleri yerleştirilerek benzetilebilirler.

Kurulum

scikit-geometry, kaynaktan oluşturulabilir veya conda ‘dan yüklenebilir.

Conda-forge kanalında Linux, OS X ve Windows paketini yayınladık. Conda kullanıcıları

üzerinden kolayca yükleyebilir

Aksi takdirde, CGAL 5.0’ın kullanılabilir olması ve ardından python -m pip install -e çalıştırılması gerekir. Klonlanmış scikit-geometry git deposundan -v scikit-geometry’yi kurmalı ve oluşturmalıdır (not: bu oluşturmak biraz zaman alır!).

Katkıda bulunun

Bu genç kitaplığın geliştirilmesine yardımcı olmakla ilgileniyorsanız, PR’lar ve sorunlarla ilgili olarak GitHub’da bize katılmaktan çekinmeyin!

Bir şirketseniz ve bu projeye sponsor olmak istiyorsanız, wolf.vollprecht@quantstack.net adresinden bana ulaşmaktan çekinmeyin

Yazar hakkında

Wolf Vollprecht, QuantStack’te çalışan bir robot mühendisidir. QuantStack, Avrupa merkezli, Açık Kaynak Bilimsel Yazılımına odaklanan küçük bir yazılım danışmanlığıdır. Etkileşimli bilgi işlemle birlikte yüksek performanslı C ++ kitaplıkları ve veri görselleştirme üzerinde çalışıyoruz. Bize ulaşmaktan çekinmeyin!

Beni Twitter’da takip edin