2009-09-17 35 views
9

Çeşitli ekran spritelarını çizen bir çizim işlevi yazdım. Bu spritelar sadece bir noktaya kadar örtüşebilir. Çok fazla örtüşmeleri gerekiyorsa, çok karartılıyorlar. Sonuç olarak, bu sprite çok fazla örtüştüğü zaman tespit etmem gerekiyor. Neyse ki sorun, spriteların ortogonal dikdörtgenler olarak muamele görmesiyle basitleştirilmiştir. Bu dikdörtgenlerin ne kadar örtüştüğünü bilmek isterim. Şu anda, sadece diğerini içerip içermediğini görmek için her bir pikseli tek bir dikdörtgede test ederek zorluyorum. Bunları sayıyorum ve yüzde çakışmalarını hesaplıyorum. Sanırım muhtemelen daha iyi, daha az kaba kuvvet yaklaşımı var. Bunu belirlemek için hangi algoritmayı kullanabilirim?İki dikdörtgenin yüzdesi çakışmasını nasıl hesaplayabilirsiniz?

wxwidgets kullanıyorum.

+0

o ana kadar ne var? Bu ev ödevi mi? – Donut

+0

Ödev gibi kokuyor? –

+1

Bu bir ev ödevi sorusu mu? Ayrıca, "yüzdeyi" daha açık bir şekilde tanımlamayı düşünmelisiniz. Sorunuz en az iki yoldan yorumlanabilir - örneğin, içlerinden biri yerine her iki dikdörtgenin kapladığı toplam kapalı alanın yüzdesi veya rect2'nin kapsadığı rect1 alanının yüzdesi olarak. – jprete

cevap

9

sonuç Çakışan yüzdesini nasıl tanımladığınıza bağlıdır, simetrik tutmak için, ben bunu böyle kodlayacağınıza:

double CalculatePercentOverlap(const wxRect& rect1, const wxRect& rect2) 
{ 
    wxRect inter = rect1.Intersect(rect2); 
    if (inter.IsEmpty()) 
    return 0; 
    return (double)(inter.GetWidth()*inter.GetHeight()) * 2.0/
    (double)(rect1.GetWidth()*rect1.GetHeight() + 
      rect2.GetWidth()*rect2.GetHeight()); 
} 
+0

Ahh çok zekisin. Kesişen işlevini bilmiyordum. Hey, insanlar buna ev ödevi sorusu gibi bakıyorlar. Sorgumda çok gergindim. Yani, muhtemelen onu silerim. Silmek, puanlarınızı kaldırır eğer yaparsam bırakırım. Teşekkürler. – max

+0

wxRect nesneleri, eksenlerle paralel olmayan dikdörtgenleri mi kullanıyor? – baumgart

+1

@max - re'sinin yeniden hesaplanması durumunda puanları kaldıracaktı, sonuçta –

İlgili konular