Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Поиск кратчайшего пути

801
21 февраля 2002 года
fishca
1 / / 20.01.2000
Помогите, пожалуйста чайнику, как найти кратчайший путь от одной точки до другой(если на пути есть препятствия), т.е. есть задача переместить персонажа (просто жирную точку на экране) в другую точку указав ее мышкой на экране. Персонаж должен умно обходить препятствия.

[ Это Сообщение было отредактировано fishca в 2002-02-22 0859 ]
380
22 февраля 2002 года
Arestov
285 / / 20.09.2000
Цитата:

On 2002-02-21 1637, fishca wrote
Помогите, пожалуйста, чайнику, как найти кратчайший путь от одной точки до другой, т.е. есть задача переместить персонажа (просто жирную точку на экране) в другую точку указав ее мышкой на экране.



Кратчайший путь между двумя точками - прямая. Самый простой путь - линейная интерполяция
x = x0*t + (1-t)*x1
y = y0*t + (1-t)*y1
где x0,y0 координаты начала отрезка,
x1,y1 - координаты конца,
t - параметр, при любом t, точка x,y будет на прямой проходящей через x0,y0-x1,y1. При t от 0 до 1 x,y будет на отрезке от x0,y0 до x1,y1.
Достоинством предложенного метода, несомненная простота, недостатком является то, что необходимы операции с вещественными числами. Это можно решить, перейдя к числам с фиксированной точкой.

Есть еще алгоритм Брезенхема, он работает только с целыми числами и крайне быстр, используется для рисования прямых. Тоже достаточно прост, но он больше по объему и комментарии потребуются довольно обширные. Для Ваших нужд я думаю хватит и выше приведённых формул. А если Брезенхем заинтересовал, напишите, я расскажу.

Вот такие дела

Аноним
Но если ты имеешь в виду, как найти кратчайший путь из одной точки до другой в лабиринте, то можно использовать волновой алгоритм. Описание посмотри например здесь
http//algolist.by.ru/maths/graphs/shortpath/volna.html
Аноним
<font color=blue>Полностью согласен с предъидущим ответом, используй волновойй алгоритм только тебе придётся его слегка изменить, потому что простой волновой алгоритм рекурсией и без неё как правило ищёт только путь, поэтому советую использовать волновой алгоритм рекурсией с возвратом, но при выборе очередной точки проверяй был ли предъидущий путь до неё короче, вообще я те могу написать программку которая в матрице ищет кратчайший путь из лаба, он маленькая и на сях или паскале(без разницы),и ещё, <font color=red>такие алгоритмы в третьем классе проходят, стыдно классику не знать,<font color=blue> а если хочешь то извратися, представь поле в графе, а потом дейкстрой, но опять же придётся модифицироватьv-j-c@narod.ru
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог