Часто при розробці різних інтерфейсів виникає задача перевірки перетинаються два заданих прямокутника. Рішення в даному випадку дуже просте, однак мною ніде не знайдене і тому в черговий раз довелося писати свій велосипед. При цьому граблі на які наступають розробники одні й ті ж, а рішення видаються гуру на форумах працюють лише в приватних випадках і не покривають всі варіанти розстановки двох прямокутників на площині.
Функція працює тільки для прямокутників, чиї сторони паралельні осях координат. В общем-то задача зведена до проектування сторін на осі координат і попарной перевірці перетинів двох відрізків. Якщо дві пари відрізків перетинаються між собою то значить один з прямокутників лежить на іншому. Однак тут є підступ: потрібно перевіряти також випадок, коли одна сторона прямокутника №1 лежить всередині тієї ж сторони прямокутника №2, а інша, сторона у №2 сама лежить всередині такої ж в №1. Цей випадок представлений на малюнку вище, під номером 1.
Нехай є два прямокутника A і B.
тоді перевірку на перетин двох цих прямокутників зробить наступна функція
а Ви думали все просто. Я теж так думав, поки не піймав ряд варіантів, які не підходять під рішення названі на форумах. Перша половина цієї «багатоповерхівки» перевіряє всі випадки, крім першого, друга створена спеціально для випадку №1.
Просто, як двічі два. Перевіряємо якщо верхня межа першого прямокутника знаходиться нижче другого, або нижня вище верхньої межі першого. Теж саме і для осі X.