2010-09-28 24 views
5

ile dikdörtgen bölgeler, nasıl (çoklu) anahat çoklu çizgi bulunur? Dikdörtgenler piksel koordinatlarında tanımlanmıştır, böylece tamsayı doğruluğu vardır, ancak bunlar binlerce büyük olabilir.Birleştirme (Boolean Birliği) kesişme, ayrık ve dokunaklı dikdörtgenler herhangi bir sayı göz önüne alındığında tamsayı doğruluk

Box collection

Gerçekten yapmayacağım GDI bölgeleri birleştirme, ana hatları için sayısal koordinatları gerekir. Bir GDI bölgesi oluşturarak ve GetRegionScans'ı arayarak sorunu basitleştirebileceğimi biliyorum, ancak yine de sorunu çözmeyecek.

Bu gerçek zamanlı UI parçasıdır, bu nedenle algoritma (belki bir düzine kadar kutuları, yüz asla fazla tahmin ediyorum) oldukça hızlı olması gerekiyor.

C# bunu, ama bu yok algoritmik bir sorudur beri gerçekten dil umurumda ediyorum. Herhangi bir fikir en hoş geldiniz. Bu performans gereksinimlerini karşılayan eğer

+0

Sen görüntüde kalın çizgilerle arıyoruz? – SLaks

+0

ne anlama gelir: "binlerce birim büyük"? düzenli 32 bit tam sayılara sığar mı? –

+0

Bu yayını bakın: http://stackoverflow.com/questions/643995/algorithm-to-merge-adjacent-rectangles-into-polygon –

cevap

4

Hiçbir fikrim yok, ama bu çalışması gerekir:

  1. Başlat dikdörtgenler boş set ile.
  2. Her bir dikdörtgeni kümeye ekleyin. Bir dikdörtgen mevcut bir dikdörtgenin üstüne taşarsa, dikdörtgenleri gerektiği kadar dikdörtgen yapın, böylece hiçbir dikdörtgen bir diğeriyle çakışmaz.
  3. Her örtüşmeyen dikdörtgenin dört tarafını bir çizgi grubuna ekleyin.
  4. Benzersiz olmayan tüm satırları kaldırın.

çıkan seti anahat oluşturan tüm satır içeriyor.


            Illustration

+0

bu muhtemelen yeterince hızlı çalışacaktır. İyi bir fikir! –

İlgili konular