kolizji pomiędzy dwoma prostokątami.
Mój stary sposób:
bool KolizjaPilkaLewaPaletka()
{
if(det(paletka.rozmiar.right, paletka.rozmiar.top, paletka.rozmiar.right, paletka.rozmiar.bottom, pilka.rozmiar.left, pilka.rozmiar.top) == 0)
{
if(det(paletka.rozmiar.right, paletka.rozmiar.top, paletka.rozmiar.right, paletka.rozmiar.bottom, pilka.rozmiar.left, pilka.rozmiar.bottom) == 0)
{
if(min(paletka.rozmiar.right, paletka.rozmiar.right) <= pilka.rozmiar.left &&amp;amp; pilka.rozmiar.left <= max(paletka.rozmiar.right, paletka.rozmiar.right)) { if(min(paletka.rozmiar.top, paletka.rozmiar.bottom) <= pilka.rozmiar.top && pilka.rozmiar.top <= max(paletka.rozmiar.top, paletka.rozmiar.bottom) || min(paletka.rozmiar.top, paletka.rozmiar.bottom) <= pilka.rozmiar.bottom && pilka.rozmiar.bottom <= max(paletka.rozmiar.top, paletka.rozmiar.bottom)) { return true; } } } } }
I to jest kod tylko dla kolizji lewa paletka - piłka. Niezłe co? Na początku sprawdza
współliniowość lewego boku piłki i prawego boku paletki, potem sprawdza czy punkty leżą na odcinkach itd... Podsumowując, wycudowane w chuj.
A to kod sposobu regedita (funkcja przyjmujaca 2 prostokaty dla ktorych ma byc sprawdzana kolizja):
inline bool OverlapRect(const RECT &a_rect1, const RECT &amp;a_rect2)
{
return (a_rect1.left < a_rect2.right) &&
(a_rect1.right > a_rect2.left) &&
(a_rect1.top < a_rect2.bottom) &&
(a_rect1.bottom > a_rect2.top);
}
Jest różnica, prawda?