Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.19;
Скачать: CL | DM;

Вниз

Как определить пересекаются ли прямоугольник и круг ?   Найти похожие ветки 

 
Its'me   (2002-11-26 18:02) [0]

Задан центр круга X0, Y0. Координаты прямоугольника X1, Y1; X2, Y2 (верхний левый и нижни правый угол). Как узнать, пересекаются ли они ? И желательно узнать с какой стороной прямоуголника идет пересечение...


 
vopros ©   (2002-11-26 18:04) [1]

А радиус?


 
AL2002 ©   (2002-11-26 18:05) [2]


> Its"me (26.11.02 18:02)

Т.е. их центр не идентичен?


 
Юрий Зотов ©   (2002-11-26 18:26) [3]

Можно чисто геометрически, а можно создать 2 региона (Elliptic и Rectangle) и скомбинировать их в третий. Пустой регион будет означать, что они не пересекаются.


 
AL2002 ©   (2002-11-26 18:46) [4]

Если их центр в одной точке, то если круг имеет диаметр меньший чем высота и ширина прямоугольника — значит не пересекаются.


 
TTCustomDelphiMaster ©   (2002-11-26 18:48) [5]

Уравнение окружности:
(X-X0)^2+(Y-Y0)^2=R^2

Подставте туда X1 и найдете 2 точки пересечения с прямой на которой лежит одна из сторон стороной. Если координаты точек пересечения попадают в диапазон (y1..y2), то кружность пересекает сторону. Если корни комплексные, то линия не пересекается с окружность.
С другими сторонами аналогично.


 
Malder ©   (2002-11-26 19:25) [6]

AL2002 © (26.11.02 18:46)
Если их центр в одной точке, то если круг имеет диаметр меньший чем высота и ширина прямоугольника — значит не пересекаются.


Речь идет про круг, а не окружность.

Да, радиус круга задан - R.


 
AL2002 ©   (2002-11-26 19:33) [7]


> Malder © (26.11.02 19:25)

Малдер! Ты появился. :))

А я про круг и говорил.


 
Malder ©   (2002-11-26 20:39) [8]

to AL2002
если бы их центры совпадали, то они точно пересекаются, так как имеется в виду не полый прямоугольник.

to Юрий Зотов
очень интересная идея ! Спасибо

P.S. Дело не в том даже, чтобы решить, а в том, чтобы решить задачу как можно проще.


 
Сатир ©   (2002-11-26 20:49) [9]

нужно описать четыре уравнения прямы, которые определяют прямоугольник и решить четыре системы уравнения, одно из которых будет напр
{ (x-x0)^2 +(y-y0)^2 = r^2
{ x=y1
{ x1<=x<=x2
в остальных системах будут изменены только два последних уравнения/условия


 
TTCustomDelphiMaster ©   (2002-11-26 21:17) [10]

Круг пересекается с прямоугольником еси выполняется одно из условий:
1. (X0>X1-R) and (X0<X2+R) and Y1>Y0 and Y0>Y2
2. (Y0>Y2-R) and (Y0<Y1+R) and X1>X0 and X0>X2

При условии что X1>X2 и Y1>Y2.
Чтобы определить с какой стороной пересекается см. TTCustomDelphiMaster © (26.11.02 18:48)


 
TTCustomDelphiMaster ©   (2002-11-26 21:25) [11]

Забыл еще 4 условия.
3. (X1-X0)^2+(Y1-Y0)^2<R^2
4. (X1-X0)^2+(Y2-Y0)^2<R^2
5. (X2-X0)^2+(Y1-Y0)^2<R^2
6. (X2-X0)^2+(Y2-Y0)^2<R^2


 
Наталия ©   (2002-11-27 07:05) [12]

Воспользуйся совктом Юрия Зотова о построении регионов - никаких уравнений решать не надо - уложишься в три строки.


 
sonja ©   (2002-11-27 12:43) [13]

>Наталия © (27.11.02 07:05)
А как ты собираешься узнать с какой стороны идет пересечение??


 
sonja ©   (2002-11-27 12:48) [14]

>Сатир © (26.11.02 20:49)
Поддерживаю


 
Наталия ©   (2002-11-27 12:59) [15]

sonja © (27.11.02 12:43)
Прямоугольник разбить на 4 региона, соответствующих каждой стороне и проверить, какие из этих регионов пересекаются с кругом.


 
Сатир ©   (2002-11-27 14:10) [16]

2Наталия © (27.11.02 12:59)
а как Вы предлагаете разбивать квадрат (предложите универсальный алгоритм построения региона;)?
а если круг пересекает две смежные стороны или две противоположные?


 
MBo ©   (2002-11-27 14:14) [17]

>Сатир
строим 4 региона 1*(длина ребра)



Страницы: 1 вся ветка

Текущий архив: 2002.12.19;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.019 c
1-61607
котел
2002-12-10 00:52
2002.12.19
Помогите кто может


3-61505
РВА
2002-12-02 17:40
2002.12.19
Ehlib использование


1-61602
Bishop
2002-12-08 23:56
2002.12.19
Быстрая очистка StringGrid


1-61679
baryjul
2002-12-08 15:15
2002.12.19
Как на панели StatusBar отобразить объект TGaude ?


3-61476
victor_ch
2002-12-02 11:56
2002.12.19
Уменьшение потребления памяти