Fajn, tak postup by mohol byť takýto:
1.) budeš kontrolovať každý bod jedného obdĺžnika, či sa nenachádza v druhom. Pomocná funkcia ( jazyk C ):
Kód:
typedef struct { // struktura popisujuca suradnice obdlznikov
int x1, y1, x2, y2;
} coord;
// x a y su suradnice jedneho bodu obdlznika, rect su suradnice x1:y1, x2:y2 druheho obdlznika
bool isInRect( int x, int y, coord rect ) {
if ( ( ( x > rect.x1 ) && ( x < rect.x2 ) ) && ( ( y > rect.y2 ) && ( y < rect.y1 ) ) )
return true;
return false;
}
2.) ak bude výsledok funkcie true, znamená to, že daný bod je vnútri obdĺžnika a vzniká tam nový bod pre ďalšie obdĺžniky.
3.) do poľa (zoznamu), kde chceš ukladať nové súradnice, pridávaj nové súradnice obdĺžnikov a to takto: nakoľko sa kontrolovaný bod jedného obdĺžnika nachádza v druhom obdĺžniku ( popis v bode 2 ), daný bod rozdelí tento obdĺžnik na tri časti:
čiže do poľa uložíš tri nové obdĺžniky takto (je to rozdelené v osi X, keďže si vravel, že to je jedno):
Kód:
typedef struct { // struktura popisujuca bod
int x, y
} point;
// ...
// kontrolovany bod
coord rect1, rect2, temp; // suradnice: 1. obdlznik, 2. obdlznik, pomocna premenna temp
std::vector< coord > array; // pole obdlznikov
point p; // v nom budu suradnice kontrolovaneho bodu
// prvy novy obdlznik
temp.x1 = rect1.x1;
temp.y1 = p.y;
temp.x2 = rect1.x2;
temp.y2 = rect1.y2;
array.push_back( temp );
// druhy novy obdlznik
temp.x1 = rect1.x1;
temp.y1 = rect1.y1;
temp.x2 = p.x;
temp.y2 = p.y;
array.push_back( temp );
// treti novy obdlznik
temp.x1 = p.x;
temp.y1 = rect1.y1;
temp.x2 = rect1.x2;
temp.y2 = p.y;
array.push_back( temp );
Pre os Y to bude iba s drobnými zmenami. To isté budeš robiť pre všetky body ( tzn celú kontrolu ) a nakoniec v poli porovnáš súradnice, ktoré sú rovnaké ( pretože niektoré sa budú opakovať ).
Je to postup písaný z hlavy, určite to bude mať nejaké muchy, ale snáď máš teraz aspoň nejakú víziu, ako na to.