![]() |
|
|
![]()
|
|
| mrgloom |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
как определить минимальное расстояние до прямоугольника?
пришло в голову только определить минимальные расстояния до 4 отрезков его составляющих. и еще вопрос. требуется еще его перетаскивать, но не очень понятно как это реализовать ,имеем точку в которой пользователь нажал кнопку мыши, определяем ближайшую точку на прямоугольнике и за эту точку надо перетаскивать прямоугольник, только непонятно как это отрисовывать, т.е. точка приложения разная, а процедура отрисовки прямоугольника одна. |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Сначала надо дать определение того, что есть это расстояние. Ибо возможны минимум 3 разных варианта - даже при условии, что точка не лежит внутри или на границе. За каким хреном определять какую-то там "точку перетаскивания"? или он ещё и поворачивается при перетаскивании? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 7 Всего: 183 |
Запоминаешь точку начала перетаскивания, в конце перетаскивания определяешь вектор, и сдвигаешь на него весь прямоугольник. -------------------- ... |
|||
|
||||
| sQu1rr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: нет Всего: 13 |
Расстояние от точки x до границы 1. Берешь по две вершины a и b 2. Ставишь точку c на середние отрезка с вершинами a и b 3. находишь наименьший xa xb или xc. Если xa или xb меньший - запоминаешь и делаешь то же самое для других сторон 4. если xc меньше чем xa и xb, то определяешь c за a, меньший из (старых) ax, bx за b, и идешь к шагу 2. вконце должно получица 4 отрезка от точки x к какждой стороне. Находишь минимальное. Не самый лучший по производительности вариант, но самый быстрый по скорости написания и объяснения
?? всмысле до каждой стороны? так в чем проблема, наименьшее из них и есть минимальное расстояние, или я дурак? когда пользователь нажимает, запоминаем положение курсора и каждый раз отрисовываем его с относительным смещением всех вершин. |
|||
|
||||
| mrgloom |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
пока я так решил проблему, но по идее, можно не считать все 4 расстояния, а определить сначала в каком из 9 секторов находится точка относительно прямоугольника и посчитать меньшее кол-во. и еще вопрос как определяется расстояние между двумя отрезками? например отрезки AB CD определяем минимальное расстояние из 4 расстояний от C до AB,от D до AB, от A до CD, от B до CD? Добавлено через 5 минут + еще непонятно при пересечении считать что расстояние 0 или считать что расстояние ноль только когда концевые точки совмещены. |
|||
|
||||
| sQu1rr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: нет Всего: 13 |
Ну, твое же задание, кому как не тебе лучше знать. Если отрезки пересекаются или касаются, то расстояние между ними = 0 с точки зрения геоментрии. сам и ответил на свой вопрос самый простой способ, зато верный |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |