![]() |
Пересечение двух прямоугольников на одной плоскости
Всем привет:)Возникла нужда в создании данной функции.
Есть допустим два прямоугольника:) они естественно на одной плоскости и стороны параллельны друг другу. Интересует сам алгоритм проверки пересечения. Пробовал сам ,выходит довольно криво..:dontknow: Координаты используются такие (x,y,x2,y2) x,y - координаты откуда начинается прямоугольник. x2,y2 - не ширина и высота,это конечные координаты Надеюсь поможете мне:) |
Ответ: Пересечение двух прямоугольников на одной плоскости
Тут был херовый алгоритм
UPD: Вот например - http://tekpool.wordpress.com/2006/10...-other-or-not/ (warning, там в очевидных местах парсером пропущены символы сравнения) |
Ответ: Пересечение двух прямоугольников на одной плоскости
Спасибо:)правда было бы более понятно в "паскалевидном" коде..просто не разобрался :-D
|
Ответ: Пересечение двух прямоугольников на одной плоскости
Код, который я написал, не учитывал ситуации, когда второй прямоугольник полностью внутри первого.
|
Ответ: Пересечение двух прямоугольников на одной плоскости
такой не сложно вроде написать,но мне нужно что бы даже если стороной касается то возвращает true написать функцию..вроде накидал да не работает
|
Ответ: Пересечение двух прямоугольников на одной плоскости
Сделал так:
Имеются x1,y1 - левый верхний угол первого прямоугольника x2,y2 - правый нижний угол первого прямоугольника ax1,ay1 - левый верхний угол второго прямоугольника ax2,ay2 - правый нижний угол второго прямоугольника Код:
If (ax1<=x2 AND ax1=>x1 AND ay1=>y1 AND ay1<=y2) Then hit=true |
Ответ: Пересечение двух прямоугольников на одной плоскости
Может быть не самый оптимальный, но наиболее очевидный путь - проверить каждую вершину каждого прямоугольника на попадание в другой прямоугольник. Если будет хотя бы одно попадание, значит прямоугольники пересекаются.
Оптимизация: 1. Сделать так, чтобы x всегда был больше x2 и y всегда был больше y2 (алгоритм будет гораздо проще и быстрее); 2. Не обязательно проверять все вершины, достаточно проверять до первого попадания. |
Ответ: Пересечение двух прямоугольников на одной плоскости
Код:
Function RectsOverlap:Bool(x1:Float, y1:Float, w1:Float, h1:Float, x2:Float, y2:Float, w2:Float, h2:Float) |
Ответ: Пересечение двух прямоугольников на одной плоскости
Вы чо, серьёзно обсуждаете решение этой задачи? Тут же даже никакой тригонометрии не надо, тупо сравнить координаты, как вы выше и написали.
|
Ответ: Пересечение двух прямоугольников на одной плоскости
Всем спасибо) я в своем коде по убирал знаки равно,добавил проверку ровного попадания одинаковый прямоугольников и "один внутри другого"
Конечно не самый производительный вариант,Но пока так:) |
Ответ: Пересечение двух прямоугольников на одной плоскости
Randomize, спасибо,твой вариант выполняется в разы быстрее! (что неудивительно) я его переделал т.к. мне нужны не ширина и высота а точные координаты правого нижнего угла,что бы не мучаться не вычислять перед выполнением:)
Памятник таким) |
Часовой пояс GMT +4, время: 03:43. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot