Nokta set işlemleri için alternatif indeksleme yöntemleri


17

Çok sayıda özellikle çalışırken performansı artırmak için sınırlayıcı bir kutu uzamsal dizin kullanmak yaygındır. Çok sayıda köşeye sahip tek tek geometrilere karşı işlemler nerede yapılırsa, benzer optimizasyon stratejileri var mı?

Örneğin, çokgen veya birleşim işlemlerinde noktayı hızlandırabilecek herhangi bir veri yapısı var mı?


1
Başlık altında, CBS'ler, hesaplama geometrisi ders kitaplarında açıklanan çeşitli dörtlü biçimler, DCEL'ler vb. Dahil olmak üzere birçok özel veri yapısı kullanır. Bu uygulama ayrıntılarını mı soruyorsunuz veya kullanıcılar tarafından komut dosyası yazma dillerinde kullanılabilecek yöntemler hakkında mı soruyorsunuz?
whuber

Teşekkürler, sanırım ders kitaplarını okumam gerekiyor. Sorum, bu veri yapılarının önceden nasıl hesaplanabileceğiydi. Önceden hesaplanmış uygulamalar var mı?
Matthew Snape

Matthew, bu harika bir soru. Gerçekten performans odaklı bir CBS, kullanıcılara tekrarlanan uygulama için veri yapılarını önceden hesaplama seçenekleri sunacaktır. Bu haliyle, "GIS" olarak yazılım reklamcılığı genellikle sadece "mekansal indeksler" biçiminde bu tür ön hesaplamayı sunarken, Mathematica (veya bir dereceye kadar R) gibi CBS analizi de yapabilen daha genel amaçlı yazılım kullanıcıya sunacaktır. bu tür şeyler üzerinde çok daha fazla kontrol.
whuber

Bence problem 2d cisimlerin “fraktal doğasına” ve belirsiz ve dengesiz dağılım bilgi yoğunluğuna dayanmaktadır.
huckfinn

Yanıtlar:


2

Yalnızca Çokgen'deki Nokta için Tamam:

Bence problem 2d cisimlerin “fraktal doğasına” ve mekansal bilginin belirsiz ve dengesiz dağılımına dayanmaktadır. Düzenli bir şebekeniz varsa, bir hücrenin konumunu veya ilişkisini kireçlemek kolaydır. Ancak bir arazi modelinin bir izolinin yan tarafında karmaşık olmayan kısımları ve diğer tarafında matematiksel olarak karmaşık kısımları olabilir (morfolojik olarak aktif kısımlar sırtlar, vadiler ...).

Dizin oluşturma iki şeyi ele almaya çalışır:

  1. Size mekansal olarak ayırt edebileceğiniz nesneleri topladığınız bir kova veren hızlı bir rutin (kovalar!). Ve BBoxes hesaplamak ve işlemek kolaydır.

  2. Uzamsal şeyleri (nesneleri) ayırt etmek veya ilişkilendirmek için bir dizi ilişki (örtüşme, dokunma).

Ne yazık ki, BBoxes size hiçbir ipucu vermiyor, her BBox'ta kaç nokta var, nesnelerin nasıl şekillendirildiği (delikler, dışbükey, ...) ve bilginin yerel olarak nasıl dağıtıldığı (sol üst köşedeki noktaların% 90'ı) BBOX). Böylece nesne seviyesinde hızlı operasyon üyeleri bulabilir ve testin ilişki yapımında birçok zaman kaybedebilirsiniz.

Daha düzensiz bir yaklaşım kullanmak için, IMO üçgenleme ve dörtlü ile birlikte strateji, bir dizinin ve dizinin ilişki oluşturma bölümünü birbirine yakınlaştırabileceğiniz stratejiler üzerinde yer alır (bucketing == ilişki kurma).

Point-in-Polygon-Test örneği için aşağıdakileri kullanarak düzensiz bir önbellek oluşturmak mümkündür:

  1. ! Poliüretan kapağınızın kısıtlı delaunay üçgenlemesi, kapak dışı algılama için ek sınır örgü noktaları ile
  2. Bunu, kutu başına N'den fazla üçgen (fraktal kovalar) ile dörtlü dizinleme düzenine yerleştirin
  3. noktanın ait olduğu üçgen seti bulun - dörtlü yaprak
  4. noktanın bulunduğu üçgeni bulun (test kısmı maks. N üçgeninin üzerinde)
  5. ve üçgen köşelerin çokgen kimliğini isteyin
  6. Kimlik benzersizse, nokta çokgene aittir, eğer değilse

Kalay ve quadtrees inşa etme maliyeti çok yüksek ve hesaplanması zordur ve dörtlü büyük ve küçük üçgenleri (daha küçük alt ağaç kutularına sığmayacak üçgenler) dengelemek zorundadır.

Bazı Araçlar ve Bağlantılar:

Üçgen - Kısıt çokgen üçgenleme

Quadtrees - Kaynak örneklerle

Stony Brook Deposu - Veri yapıları ve diskrete geometrisi

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.