Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Расстояние между контурами. / 12 сообщений из 12, страница 1 из 1
15.06.2005, 08:41
    #33116863
Void666
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расстояние между контурами.
Я читаю что, расстояние между контуром C1 и С2 (двухмерные контуры) это наименьшая длинна отрезка проходящего через любые две точки P1 и P2, при этом P1 пренадлежит С1,а P2 пренадлежит C2. Ясно, что достаточно рассматривать только точки находящиеся на границе контура, поэтому я уже определил множество точек:
pc10 ... pc1n - точки лежащие на границе контура С1 и pc20 ... pc2n - точки лежащие на границе контура С2.

Теперь проблема, как это сделать быстро :) Прямой перебор для меня не приемлем, т.к точек может быть десятки тысячь !
...
Рейтинг: 0 / 0
15.06.2005, 11:24
    #33116966
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расстояние между контурами.
gluTessEndPolygon из объекта Тесселятор GLU-dll по умолчанию есть в OS.
может определять самоперечечения полигонов (может и тебе подойдёт)
http://f.gamedev.ru/?group=5&topic=295
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
16.06.2005, 16:25
    #33120025
dwl
dwl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расстояние между контурами.
1) берем первую точку первого полигона и вторую точку второго полигона. Считаем квадратичное расстояние между ними. Это будет начальное значение минимума (квадратичное чтобы не тратить время на расчет квадратного корня).

2) далее бежим двойным циклом по всем ребрам полигона(любого из двух). Ищем минимальное расстояние от текущего в итерации ребра до всех ребер соседнего полигона(кртическое уловие - расстояние НОЛЬ прерываем все). Кстати, это очень дешевая операция(расстояние между отрезками).

3) Таким образом находим два САМЫХ близких ребра.

4) извлекаем из минимума квадратный корень, как результат. ну и прописываем ближайшие точки как бонус-результат.

Эта задача легко формализуется для любого N-мерного пространства
...
Рейтинг: 0 / 0
16.06.2005, 18:38
    #33120378
Анатолий Широков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расстояние между контурами.
Void666Я читаю что, расстояние между контуром C1 и С2 (двухмерные контуры) это наименьшая длинна отрезка проходящего через любые две точки P1 и P2, при этом P1 пренадлежит С1,а P2 пренадлежит C2

Это неверный посыл. Вот контрпример:

Код: plaintext
1.
2.
3.
4.
5.
6.
+----+ 
 \  /
  \/
+----+
|    |
+----+

между треугольником и прямоугольником ниодна из пар вершин не является кратчайшим расстоянием.

2 dwl

ты предложил алгоритм с квадратичной сложностью (полный перебор) - для 10000 это уже 100 000 000 проходов - это недопустимо по условию задачи.
...
Рейтинг: 0 / 0
16.06.2005, 19:32
    #33120452
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расстояние между контурами.
2dw... а зачем так сложно то?
Достаточно для каждой вершины С1 опускаем перепендикуляры на каждое из ребер С2 - получаем расстояния от вершин до ребер. И обратный расчет - из каждой вершины С2 опускаем перепендикуляр на каждое из ребер С1

В итоге, если количество вершин у С1 и С2 обозначим через К1 и К2, то всего понадобится сделать 2*К1*К2 расчетов.

А "два самых близких ребра" это, извините что-то странное :)
...
Рейтинг: 0 / 0
18.06.2005, 16:58
    #33123186
dwl
dwl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расстояние между контурами.
Ну если чуток оптимизировать то что я перед этим говорил:
1) берем любое ребро первого контура. находим ближайшее к нему у второго.
2) для этого ближайшего находим ближайшеее из оставшихся в первом полигоне.

ЗЫЖ зреет еще один бредовый вариант (кто знает). упорядочить от начала координат( но без подсчета расстояния ). затем проверить их ребра. Это как использовать проекции на оси.
...
Рейтинг: 0 / 0
20.06.2005, 11:07
    #33124193
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расстояние между контурами.
задача решается на раз в 3D игрушках с помощью матриц и векторов. Например найти точку пересечения выстрела с поверхностью, или передвижение строго "по земле".
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
20.06.2005, 16:02
    #33125024
dwl
dwl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расстояние между контурами.
да она много где решается. Пересечение выстрела с поверхностью не имеет ничего общего с расстоянием между контурами. Вот сейчас смотрю на алго Quake3 и в упор там не вижу того что надо было решающему.

И потом ему как я понял было надо не тот факт что эта задача решается на раз там или на два. Ему нужен был алго.
...
Рейтинг: 0 / 0
20.06.2005, 17:53
    #33125300
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расстояние между контурами.
dwlда она много где решается. Пересечение выстрела с поверхностью не имеет ничего общего с расстоянием между контурами. Вот сейчас смотрю на алго Quake3 и в упор там не вижу того что надо было решающему.

И потом ему как я понял было надо не тот факт что эта задача решается на раз там или на два. Ему нужен был алго.
а я о чём.
Просто очень часто разработчики игр (очень часто именно Сишники) тусуются на своих форумах. И поэтому методы решения задачь "чистых Сишников" (этот форум) отличаются от прикладников-игровиков. IMHO
http://www.gamedev.ru/articles/?id=30113
...
Рейтинг: 0 / 0
21.06.2005, 07:28
    #33125734
Void666
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расстояние между контурами.
2 Petro

Да супер, это почти то что надо, скажем так, это один из вариантов идеи, реализую его или нет пока не знаю, если интересно пишите.
...
Рейтинг: 0 / 0
21.06.2005, 11:54
    #33126345
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расстояние между контурами.
Void6662 Petro

Да супер, это почти то что надо, скажем так, это один из вариантов идеи, реализую его или нет пока не знаю, если интересно пишите.
у меня реализовано и работает, правда нужно было только определить самопересечения полигона (выдаёт проблемные точки - ошибки в полигоне).

ЗЫ. Очень полезно общение в соседних областях чтобы не изобретать велосипед.
...
Рейтинг: 0 / 0
21.06.2005, 11:56
    #33126359
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расстояние между контурами.
Void666 напиши в мыло функцию, если получится.
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Расстояние между контурами. / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]