Grafik programcıları görüntüyü değiştirmeyen görüntü oluşturma köşeleriyle nasıl başa çıkıyor?


10

Yani, başlık biraz garip. Biraz arka plan vereceğim ve sonra sorumu soracağım.

Arka plan : Bir web CBS uygulama geliştiricisi olarak çalışıyorum, ancak boş zamanlarımda harita oluşturma ve veri değişim formatlarını iyileştirme ile oynuyorum. Sadece 2B alanda çalışıyorum.

Karşılaştığım ilginç bir sorun, çokgenleri küçük bir ölçekte (yakınlaştırılmış çıkış yolu) oluşturduğunuzda, köşelerin çoğunun gereksiz olduğu. Aşırı bir durum, sadece tek bir pikseli kaplayan 500.000 köşeye sahip bir çokgene sahip olmanızdır. Bu verileri tarayıcıya gönderiyorsanız, bu köşelerin ~ 499,999'unu atlamak mantıklı olacaktır. Bunu başarabilmemizin bir yolu, bir sunucuda görüntü oluşturmak ve onu PNG: voila olarak göndermektir. Bununla birlikte, bazen, etkileşimli olabilmesi için tarayıcıya SVG (veya canvas veya webgl) ile oluşturulabilecek verilerin gönderilmesini istiyoruz.

Sorun : Modern coğrafi veri kümelerini kullanarak SVG'nin oluşturma yeteneklerini aşırı yüklemenin çok kolay olduğu ortaya çıkıyor. Bu sınırlamalarla başa çıkmak için, belirli bir ölçek ve harita kapsamı (ve gerekirse bilinen bir harita piksel genişliği ve yüksekliği için) için bir veri kümesini görsel olarak kayıpsız olarak nasıl azaltacağımı anlamaya çalışıyorum .

Sadece Douglas-Peucker algoritmasını kullanarak veri boyutunda büyük bir azalma elde ettim ve çokgenleri tek bir piksel içinde doğru tutmayı başarabildiğime inanıyorum. Ne yazık ki, Douglas-Peucker topolojiyi korumaz, bu nedenle çokgenler arasındaki sınırların nasıl işlendiğini değiştirdi. Denemek ve amaca uyum sağlamak için diğer algoritmaları kolayca bulamadım, ancak çok fazla CS / algoritma arka planım yok ve onları görürsem onları tanımayabilir.


1
Google için "Topolojik Olarak Tutarlı Douglas-Peucker" ve bazı makalelerin özetlerine bazı bağlantılar bulacaksınız. Ne yazık ki, gördüğüm tüm makaleler için ödemek zorunda.
Doc Brown

@DocBrown Teşekkürler! Questia'nın ücretsiz bir denemesi bile var.
canisrufus

Yanıtlar:


3

Aradığın şey 2d level of detail algorithms.

Vurgulanan terimleri ararsanız, Google'da bu konuda çok fazla belge vardır.

Stackoverflow ile ilgili bu soru, 2B Ayrıntı Düzeyi oluşturma hakkında aradığınız bilgilere sahiptir.


Çok ilgili kelime için +1. Aslında ayrıntı düzeyinde bir yaklaşım kullanıyorum, ancak ihtiyaçlarıma uygun bir çokgen basitleştirme algoritmasına ihtiyacım var. 3D olanlar için temiz bir genel bakış bulundu. Kodlamak için zamanım olmamasına rağmen, aslında uygun bir basitleştirme stratejisi geliştirdiğime inanıyorum.
canisrufus
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.