![]() |
|
|
![]()
|
|
| Rockie |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: нет Всего: 31 |
Здравтсвуйте!
Есть площадь для рисования, на ней создаются прямоугольники. Стороны располагаются параллельно осям x и у. Координаты известны. Необходимо определить расстояние между этими прямоугольниками(есть минимальный предел, на который они не должны сближаться). Как по вашему это лучше сделать? -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
| Rockie |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: нет Всего: 31 |
Пока что пришел к такому варианту.
![]() То есть увеличиваем стороны прямоугольника на расстояние минимального предела. А вершины помещаем в окружности радиуса заданного предела. далее проверяем, не входят ли вершины второго прямоугольника в пять получившихся таким образом прямоугольников. а также не входят ли вершины другого прямоугольника в одну из четырех окружностей вокруг вершин первого. если не входят - прямоугольники на дозволенном расстоянии друг от друга. Так задача сводится к вхождению точки в прямоугольник и к задаче вхождения точки в окружность, а это уже вроде бы существующие алгоритмы. Жду ваших идей, поправок. -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
| Rockie |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: нет Всего: 31 |
Тэкс. Принадлежность полигону нашел, приведу позже. Проблемы с принадлежностью точки кругу. подскажите пожалуйста формулу. help!
-------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 5 Всего: 99 |
круг как описан: радиус+точка центра?
Тогда расстояние (точка-точка центра круга) < радиус => точка в кругу расстояние (точка-точка центра круга) = радиус => точка на кругу расстояние (точка-точка центра круга) > радиус => точка вне круга -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| Rockie |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: нет Всего: 31 |
cardinal, круг описан как точка центра и радиус. Но точка центра круга не в 0.0. Нужно задать смещение?
Спасибо! По репе! Это сообщение отредактировал(а) Rockie - 18.10.2007, 20:47 -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 5 Всего: 99 |
Нет. Нужно просто в векторном пространстве координаты точек друг из друга вычесть и посчитать длину получившегося вектора, но я так понял, что ты уже сам разобрался... Не за что. -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| 4d5a |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 10.6.2007 Репутация: 1 Всего: 1 |
А не проще увеличить один прямоугольник типа
________ | ____ | | | | | | |___| | |_______| (коечно в таком случае расстояние до стороны меньше растояния до угла) Или ПРИНЦИПИАЛЬНО чтобы минимальный предел сохоанялся ? А можно использовать апишную функцию PtInRgn (определяет точка в полигоне или нет) |
|||
|
||||
| Rockie |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: нет Всего: 31 |
4d5a, да, конечно. -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Не понимаю - для чего собсно круги наворачивать? надо же расстояние между наиболее близкорасположенными точками... а вариантов-то всего три:
1) Прямоугольники пересекаются или касаются друг друга. При этом проекции их на каждую из осей координат имеют общие точки. Расстояние = 0. 2) Прямоугольники не пересекаются, но перекрываются в проекции (проекция на одну ось имеет общие точки). Расстояние = расстоянию между проекциями на другую ось. 3) Проекции ни на одну из осей не пересекаются. Расстояние = гипотенузе прямоугольного треугольника со сторонами = расстояниям между проекциями по осям. Получение проекции на ось и определение факта пересечения проекций - задачка для третьего класса... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |