Adesea, atunci când se dezvoltă diverse interfețe, se pune problema dacă se intersectează două dreptunghiuri specificate. Soluția în acest caz este foarte simplă, dar n-am găsit-o nicăieri și, prin urmare, din nou am trebuit să scriu bicicleta mea. La aceeași rake pe care dezvoltatorii se apropie, soluția dată de guru la forumuri funcționează numai în cazuri speciale și nu acoperă toate opțiunile pentru aranjarea a două dreptunghiuri în avion.
Funcția funcționează numai pentru dreptunghiuri ale căror laturi sunt paralele cu axele de coordonate. În general, sarcina este redusă la părțile proeminente pe axa de coordonate și verificând pereche intersecțiile a două segmente. Dacă două perechi de segmente se intersectează unul pe altul, atunci unul dintre dreptunghiuri se află pe cealaltă. Cu toate acestea, aici este o captură: este necesar să se verifice și cazul în care o parte a dreptunghiului №1 se află în interiorul aceleiași laturi a dreptunghiului №2, iar celălalt, partea a 2-a se află în interiorul aceluiași în nr.1. Acest caz este prezentat în figura de mai sus, sub numărul 1.
Să fie două dreptunghiuri A și B.
atunci verificarea intersecției acestor două dreptunghiuri va fi efectuată de următoarea funcție
și credeai că este simplu. Și eu am crezut așa, până am prins o serie de opțiuni care nu se potrivesc soluțiilor menționate în forumuri. Prima jumătate a acestui "mare" verifică toate cazurile cu excepția primei, cea de-a doua fiind creată special pentru cazul nr. 1.
Doar ca două ori. Verificați dacă marginea superioară a primului dreptunghi este sub a doua, sau cea inferioară este deasupra marginii superioare a primei. Același lucru este valabil și pentru axa X.