2009-09-17 5 views
9

J'ai écrit une fonction de dessin qui dessine divers sprites à l'écran. Ces sprites ne peuvent se chevaucher que jusqu'à un certain point. S'ils doivent se chevaucher, ils deviennent trop obscurs. Par conséquent, j'ai besoin de détecter quand ces sprites se chevauchent trop. Heureusement, le problème est simplifié en ce que les sprites peuvent être traités comme des rectangles orthogonaux. J'aimerais savoir à quel point ces rectangles se chevauchent. À l'heure actuelle, je force juste en testant chaque pixel dans un rectangle pour voir si l'autre le contient. Je les compte et calcule le chevauchement en pourcentage. Je pense qu'il y a probablement une meilleure approche de la force brute. Quel algorithme puis-je utiliser pour le déterminer?Comment pouvez-vous calculer le pourcentage de chevauchement de deux rectangles?

J'utilise wxwidgets.

+0

Qu'avez-vous à ce jour? Est-ce que ce sont les devoirs? – Donut

+0

Ça sent le devoir? –

+1

Est-ce une question de devoirs? En outre, vous devriez envisager de définir le «pourcentage» plus clairement. Votre question peut être interprétée au moins de deux façons: par exemple, le pourcentage de la surface couverte totale occupée par les deux rectangles au lieu de l'un d'entre eux, ou le pourcentage de la surface de rect1 couverte par rect2. – jprete

Répondre

9

Les résultats dépendent de la façon dont vous définissez le pourcentage de chevauchement, pour le garder symétrique, je coder comme ceci:

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 vous êtes génial. Je ne savais pas de la fonction d'intersection. Hey, les gens se fâchent à ce sujet ressemblant à une question de devoirs. J'étais trop laconique dans mes questions. Donc, je vais probablement le supprimer. Est-ce que la suppression supprime vos points parce que si c'est le cas, je le laisserai. Merci. – max

+0

Est-ce que les objets wxRect traitent des rectangles qui ne sont pas parallèles aux axes? – baumgart

+1

@max - il supprimerait les points si son représentant était recalculé, ce qui arrivera finalement –

Questions connexes