|
|
|
Расстояние между контурами.
|
|||
|---|---|---|---|
|
#18+
Я читаю что, расстояние между контуром C1 и С2 (двухмерные контуры) это наименьшая длинна отрезка проходящего через любые две точки P1 и P2, при этом P1 пренадлежит С1,а P2 пренадлежит C2. Ясно, что достаточно рассматривать только точки находящиеся на границе контура, поэтому я уже определил множество точек: pc10 ... pc1n - точки лежащие на границе контура С1 и pc20 ... pc2n - точки лежащие на границе контура С2. Теперь проблема, как это сделать быстро :) Прямой перебор для меня не приемлем, т.к точек может быть десятки тысячь ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2005, 08:41 |
|
||
|
Расстояние между контурами.
|
|||
|---|---|---|---|
|
#18+
gluTessEndPolygon из объекта Тесселятор GLU-dll по умолчанию есть в OS. может определять самоперечечения полигонов (может и тебе подойдёт) http://f.gamedev.ru/?group=5&topic=295 ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2005, 11:24 |
|
||
|
Расстояние между контурами.
|
|||
|---|---|---|---|
|
#18+
1) берем первую точку первого полигона и вторую точку второго полигона. Считаем квадратичное расстояние между ними. Это будет начальное значение минимума (квадратичное чтобы не тратить время на расчет квадратного корня). 2) далее бежим двойным циклом по всем ребрам полигона(любого из двух). Ищем минимальное расстояние от текущего в итерации ребра до всех ребер соседнего полигона(кртическое уловие - расстояние НОЛЬ прерываем все). Кстати, это очень дешевая операция(расстояние между отрезками). 3) Таким образом находим два САМЫХ близких ребра. 4) извлекаем из минимума квадратный корень, как результат. ну и прописываем ближайшие точки как бонус-результат. Эта задача легко формализуется для любого N-мерного пространства ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2005, 16:25 |
|
||
|
Расстояние между контурами.
|
|||
|---|---|---|---|
|
#18+
Void666Я читаю что, расстояние между контуром C1 и С2 (двухмерные контуры) это наименьшая длинна отрезка проходящего через любые две точки P1 и P2, при этом P1 пренадлежит С1,а P2 пренадлежит C2 Это неверный посыл. Вот контрпример: Код: plaintext 1. 2. 3. 4. 5. 6. между треугольником и прямоугольником ниодна из пар вершин не является кратчайшим расстоянием. 2 dwl ты предложил алгоритм с квадратичной сложностью (полный перебор) - для 10000 это уже 100 000 000 проходов - это недопустимо по условию задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2005, 18:38 |
|
||
|
Расстояние между контурами.
|
|||
|---|---|---|---|
|
#18+
2dw... а зачем так сложно то? Достаточно для каждой вершины С1 опускаем перепендикуляры на каждое из ребер С2 - получаем расстояния от вершин до ребер. И обратный расчет - из каждой вершины С2 опускаем перепендикуляр на каждое из ребер С1 В итоге, если количество вершин у С1 и С2 обозначим через К1 и К2, то всего понадобится сделать 2*К1*К2 расчетов. А "два самых близких ребра" это, извините что-то странное :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2005, 19:32 |
|
||
|
Расстояние между контурами.
|
|||
|---|---|---|---|
|
#18+
Ну если чуток оптимизировать то что я перед этим говорил: 1) берем любое ребро первого контура. находим ближайшее к нему у второго. 2) для этого ближайшего находим ближайшеее из оставшихся в первом полигоне. ЗЫЖ зреет еще один бредовый вариант (кто знает). упорядочить от начала координат( но без подсчета расстояния ). затем проверить их ребра. Это как использовать проекции на оси. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2005, 16:58 |
|
||
|
Расстояние между контурами.
|
|||
|---|---|---|---|
|
#18+
задача решается на раз в 3D игрушках с помощью матриц и векторов. Например найти точку пересечения выстрела с поверхностью, или передвижение строго "по земле". ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 11:07 |
|
||
|
Расстояние между контурами.
|
|||
|---|---|---|---|
|
#18+
да она много где решается. Пересечение выстрела с поверхностью не имеет ничего общего с расстоянием между контурами. Вот сейчас смотрю на алго Quake3 и в упор там не вижу того что надо было решающему. И потом ему как я понял было надо не тот факт что эта задача решается на раз там или на два. Ему нужен был алго. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 16:02 |
|
||
|
Расстояние между контурами.
|
|||
|---|---|---|---|
|
#18+
dwlда она много где решается. Пересечение выстрела с поверхностью не имеет ничего общего с расстоянием между контурами. Вот сейчас смотрю на алго Quake3 и в упор там не вижу того что надо было решающему. И потом ему как я понял было надо не тот факт что эта задача решается на раз там или на два. Ему нужен был алго. а я о чём. Просто очень часто разработчики игр (очень часто именно Сишники) тусуются на своих форумах. И поэтому методы решения задачь "чистых Сишников" (этот форум) отличаются от прикладников-игровиков. IMHO http://www.gamedev.ru/articles/?id=30113 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 17:53 |
|
||
|
Расстояние между контурами.
|
|||
|---|---|---|---|
|
#18+
2 Petro Да супер, это почти то что надо, скажем так, это один из вариантов идеи, реализую его или нет пока не знаю, если интересно пишите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2005, 07:28 |
|
||
|
Расстояние между контурами.
|
|||
|---|---|---|---|
|
#18+
Void6662 Petro Да супер, это почти то что надо, скажем так, это один из вариантов идеи, реализую его или нет пока не знаю, если интересно пишите. у меня реализовано и работает, правда нужно было только определить самопересечения полигона (выдаёт проблемные точки - ошибки в полигоне). ЗЫ. Очень полезно общение в соседних областях чтобы не изобретать велосипед. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2005, 11:54 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33116863&tid=2033124]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
15ms |
get forum data: |
4ms |
get page messages: |
72ms |
get tp. blocked users: |
2ms |
| others: | 250ms |
| total: | 429ms |

| 0 / 0 |
