![]() |
|
![]() ![]() ![]() |
|
Kurt |
|
|||
Увлеченный ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1662 Регистрация: 22.8.2003 Где: Краснодар Репутация: нет Всего: 36 |
Здравствуйте!
Есть проблемка - имеется объект, состоящий из нескольких полигонов (имеется ввиду просто наривованный объект на экране. из нескольких полигонов - например, из 2-х треугольников составлен прямоугольник). Координаты полигонов хранятся отдельно - просто строки в файле: номер полигона, к к-му относится точка, ее координаты. Все. А также имеется "отдельная" точка (ну просто точка, например, куда кликнул мышью). Так вот, вопрос - как узнать расстояние до объекта в целом? Не до конкретного полигона, а целиком (на примере прямоугольника - расстояние до него). Желательно, наиболее быстрый способ. Спасибо. -------------------- Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед) ... Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн) |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
00000000000000000 00111111100000000 00111111100000000 00111111100000000 00000000000000*00 00000000000000000 ну, и какое же здесь расстояние между точкой (*) и прямоугольником (1)? расстояние можно ввести по-разному, но почти всегда оно вводится, как расстояние до какой-то выбранной точки например, расстояние до центра масс или до ближайшей точки если ты больше конкретизируешь задачу, возможно, станет понятней, какое расстояние тебе нужно -------------------- qqq |
|||
|
||||
&-ray |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 406 Регистрация: 15.4.2003 Где: Казахстан, г Аста на Репутация: нет Всего: нет |
Скорее всего ему надо расстояние до ближайшей точки.
Тут скорее всего надо попорядку обрабатывать все полигоны и вычислять, какой из них наиболее приближен к точке, а затем провести нормаль от точки до ближайшей стороны этого полигона. -------------------- "Совсем неважно от чего помрешь, ведь куда важнее - для чего родился..." С.Б. -------------------- И снова мышь беру я в руки Куда иду? - Конечно в сруки! |
|||
|
||||
Kurt |
|
|||
Увлеченный ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1662 Регистрация: 22.8.2003 Где: Краснодар Репутация: нет Всего: 36 |
&-ray, абсолютнейше прав!
-------------------- Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед) ... Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн) |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
ну тогда мне кажется, что самый быстрый способ будет такой:
перебрать все точки, найти две самые близкие A,B C - точка, расстояние к которой ищется дальше смотрим треугольник ABC 1. угол A - тупой => расстояние=расстояние(A,C) 2. угол B - тупой => расстояние=расстояние(B,C) 3. иначе => действительно строим нормаль из C на AB, находим точку пересечения D расстояние=расстояние(D,C) -------------------- qqq |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Симплекс метод вам в руки. Это ж как раз графическое его решение.
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
в симплекс-методе минимизируется линейная функция, а здесь нужно минимизировать расстояние (которое далеко не линейная функция)
думаю, для того, чтобы его применить, его нужно будет хорошенько поменять (это, если получится) -------------------- qqq |
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
||||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Менять? Надо через точку провести нормаль к линии - от точки до геометрического центра фигуры. Получившееся нормаль будет целевой функцией, а геометрическая фигура - множество решений. Самый, что ни на есть симплекс метод. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
то, что симплекс метод не подходит для этой задачи можно показать так:
симплекс метод в качестве решения всегда дает одну из вершин многоугольника, а при решении вышеописанной задачи иногда будет получаться точка на каком-то ребре... -------------------- qqq |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Согласен. Ты прав. Это если ребро будет параллельно целевой функции. Правда маловероятно, но возможно. А алгоритм должен работать всегда. Забираю свои слова обратно.
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
&-ray |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 406 Регистрация: 15.4.2003 Где: Казахстан, г Аста на Репутация: нет Всего: нет |
У maxim1000 лучший вариант
А углы на предмет "тупости" можно проверить по теореме Пифагора: проверяем угол А: если BC^2>AC^2+AB^2 - угол тупой аналогично с B -------------------- "Совсем неважно от чего помрешь, ведь куда важнее - для чего родился..." С.Б. -------------------- И снова мышь беру я в руки Куда иду? - Конечно в сруки! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |