Trovare l'area di sovrapposizione di due rettangoli (in C #)
-
20-09-2019 - |
Domanda
Modifica:
semplice codice che ho usato per risolvere il problema nel caso in cui qualcuno è interessato (grazie a Fredrik):
int windowOverlap(Rectangle rect1, Rectangle rect2)
{
if (rect1.IntersectsWith(rect2))
{
Rectangle overlap = Rectangle.Intersect(rect1, rect2);
if (overlap.IsEmpty)
return overlap.Width * overlap.Height;
}
return 0;
}
domanda iniziale:
Mi piacerebbe conoscere un modo rapido e sporco per verificare se due rettangoli si sovrappongono e se lo fanno calcolare l'area della sovrapposizione. Per curiosità l'amor che mi interessa nel caso in cui 1) tutte le linee in entrambi i rettangoli sono o verticale o orizzontale o 2) il caso generale per ogni due rettangoli, ma l'unica risposta che mi ha realmente bisogno è il caso 1.
Sto pensando lungo le linee di:
double areaOfOverlap( Rect A, Rect B)
{
if ( A.Intersects(B) )
{
// calculate area
// return area
}
return 0;
}
Per A.Intersects () Stavo pensando di utilizzare il test assi di separazione, ma se i rettangoli hanno solo linee orizzontali e verticali c'è un modo ancora più semplice (più veloce) per controllare?
E per calcolare l'area dove si intersecano c'è un modo rapido per farlo se i rettangoli solo linee orizzontali e verticali?
Infine, questo non è correlata alla domanda, ma mi farebbe piacere qualche consiglio qualcuno potrebbe avere su un buon libro / pagina web dove ho potuto rivedere la matematica per la computer grafica. Sono stato il college per un po 'e mi sento come sto dimenticando tutto :)! Qualcun altro ha questo problema?
(Nota: ho trovato questa domanda diverso da questo che sembra più complicato e non risponde direttamente alla domanda.)
Soluzione
Forse interpretano male la tua domanda, ma non il metodo Rectangle.Intersect
fare il lavoro? Esso restituisce l'area di intersezione, e quindi si può facilmente calcolare l'area di esso.
Altri suggerimenti
Sembra di rilevamento delle collisioni di base. Hai guardato questa pagina su Wikipedia?
Mike
modifica: Fredrik fare la sua risposta allo stesso tempo ho fatto questo, la sua risposta ha ottenuto il mio upvote (: