2009-09-17 23 views
9

Ho scritto una funzione di disegno che disegna vari sprite sullo schermo. Questi sprite possono solo sovrapporsi fino a un certo punto. Se devono sovrapporsi, diventano troppo oscuri. Di conseguenza ho bisogno di rilevare quando questi sprites sono troppo sovrapposti. Fortunatamente, il problema è semplificato dal fatto che gli sprite possono essere trattati come rettangoli ortogonali. Mi piacerebbe sapere di quanto questi rettangoli si sovrappongano. In questo momento, ho solo la forza bruta testando ogni pixel in un rettangolo per vedere se l'altro lo contiene. Conta questi e calcola la sovrapposizione percentuale. Penso che ci sia probabilmente un approccio migliore, meno brutale. Quale algoritmo posso usare per determinare questo?Come si può calcolare la sovrapposizione percentuale di due rettangoli?

Sto usando wxwidgets.

+0

Cos'hai finora? Sono questi compiti? – Donut

+0

Gli odori come i compiti? –

+1

Questa è una domanda sui compiti? Inoltre, dovresti considerare di definire la "percentuale" in modo più chiaro. La tua domanda può essere interpretata in almeno due modi: per esempio, come la percentuale dell'area coperta totale che è occupata da entrambi i rettangoli invece di uno di essi, o la percentuale dell'area di rettale1 coperta da rect2. – jprete

risposta

9

I risultati dipendono da come si definisce la percentuale di sovrapposizione, per tenerlo simmetrica, vorrei codice in questo modo:

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

Ah, tu sei brillante. Non conoscevo la funzione intersect. Ehi, la gente si sta arrabbiando per questa domanda simile a un compito a casa. Ero troppo teso nelle mie domande. Quindi, probabilmente lo cancellerò. Eliminare rimuovere i punti causa se lo lascerà. Grazie. – max

+0

Gli oggetti wxRect gestiscono rettangoli che non sono paralleli agli assi? – baumgart

+1

@max - rimuoverà i punti se il suo rappresentante è stato ricalcolato, cosa che succederà alla fine –

Problemi correlati