Edit:Trovare l'area di sovrapposizione di due rettangoli (in C#)
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 sapere un modo rapido e sporco per verificare se due rettangoli si sovrappongono e se calcolano l'area della sovrapposizione. Per curiosità sono interessato al caso in cui 1) tutte le linee in entrambi i rettangoli sono verticali o orizzontali o 2) nel caso generale di due rettangoli, ma l'unica risposta che mi serve è 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 ancora più semplice (più veloce) modo di controllare?
E per calcolare l'area in cui si intersecano c'è un modo rapido per farlo se i rettangoli sono solo linee orizzontali e verticali?
Infine, questo non è correlato alla domanda, ma mi piacerebbe qualsiasi consiglio che qualcuno potrebbe avere su un buon libro/pagina web in cui potrei rivedere la matematica per la grafica computerizzata. Sono fuori dal college da un po 'e sento che sto dimenticando tutto :)! Qualcun altro ha quel problema?
(NOTA: ho trovato questa domanda diversa rispetto this che sembra più complicato e non risponde direttamente alla domanda.)
Un rettangolo orizzontale è un rettangolo verticale, dipende da che parte consideri la parte superiore. –
** if (overlap.IsEmpty) ** dovrebbe essere ** if (! overlap.IsEmpty) ** – ReinierDG