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.)

È stato utile?

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 (:

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top