4 / 4 / 0
Регистрация: 13.12.2016
Сообщений: 246
|
|||||||||||
1 | |||||||||||
Массив: Нарисовать траекторию движения объекта по массиву...09.05.2018, 17:10. Показов 3233. Ответов 15
Метки нет (Все метки)
Всем привет, имеется такая задача: Сгенерировать двумерный массив размером MxN. Заполнить его препятствиями.
Обозначить точку старта и финиша. Нарисовать траекторию движения объекта по массиву. В общем дело об автомобиле, но не суть. Уже второй день пытаюсь придумать алгоритм обхода препятствий, но бывают все равно ситуации, когда объект заходит в тупик # # # # o # # . И выход назад не катит, так как там уже траектория объекта(точка). Кто что может посоветовать? Пока делал так: проверял в каком направление двигаться надо. Сначала проверял нужно вверх или вниз, а уже потом внутри этих условий выбирал рандомно между вертикальным и горизонтальным направлением(только вправо, так как движение начинается слева направо). Если же разница между вертикальными координатами равна финишу, то объект начинал двигаться только вправо, пока не встретит препятствие, если встретил, то рандомно идет вверх или вниз. Но если заходит в такой тупик, то там выхода нет... В общем алгоритм самодельный и некрасивый... Может кто-нибудь что посоветовать из этой области? Карты выглядит так: Сам класс карты: Карта генерируется прямо в конструкторе, пока только без параметров конструктор, позже добавлю с параметрами. Но самое главное написать функцию MoveSimulation(); Там основной цикл do-while, где раньше код был, но он не работает, поэтому не буду скидывать сюда.
0
|
09.05.2018, 17:10 | |
Ответы с готовыми решениями:
15
Нарисовать траекторию движения Скрыть траекторию движения объекта Нарисовать траекторию движения тела Найти уравнение траектории точки. Нарисовать траекторию движения точки и показать направление её движения |
4 / 4 / 0
Регистрация: 13.12.2016
Сообщений: 246
|
||||||
09.05.2018, 17:11 [ТС] | 2 | |||||
0
|
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
|
|
09.05.2018, 17:17 | 3 |
https://en.wikipedia.org/wiki/A*_search_algorithm
ну и там по релэйтед ссылкам походи
0
|
4 / 4 / 0
Регистрация: 13.12.2016
Сообщений: 246
|
|
09.05.2018, 19:36 [ТС] | 4 |
Спасибо,я уже нашел тоже этот алгоритм, но не могу понять с чего начать кодить, то есть надо проверить сначала клетки вокруг себя, записать их допустим в массив,но только какие данные о них записать в массив? А потом проверить уже соседей этих клеток? И так до каких пор? То есть какой конечное условие у цикла должно быть? Может кто-нибудь помочь понять этот алгоритм, а то я нахожу псевдо-код, а саму реализацию найти не могу...
0
|
4 / 4 / 0
Регистрация: 13.12.2016
Сообщений: 246
|
|||||||||||
09.05.2018, 20:00 [ТС] | 5 | ||||||||||
Я не очень понимаю какие переменные для хранения нужны мне, сейчас я немного переделал генерацию карты - упростил препятствия:
Вот новый код, здесь почти ничего не изменилось кроме генерации карты...
0
|
4 / 4 / 0
Регистрация: 13.12.2016
Сообщений: 246
|
|
09.05.2018, 20:59 [ТС] | 6 |
Я благодарен за информацию по алгоритму, он мне понятен, но как реализовать на java не представляю... буду очень благодарен, если сможете хоть чем-нибудь мне помочь!
Добавлено через 57 минут Может быть хотя BFS осилить... Только я понимаю, что мы сначала рассматриваем соседние клетки(пустые) и ту на которой, стояли отмечаем как посещенную. И так для следующих соседей делаем. И где можно все эти данные хранить? Получается что первые соседи подразделяются, и так далее очень много раз... Какой-то рекурсией попахивает...Пока я не понимаю, как нам поможет эти посещения соседей... А дальше, если я смогу понять, как дойти до финиша таким способом. То как правильный путь выбрать и короткий? У нас ведь будет массив посещенных клеток, а не конкретно до финиша. Как получить ответ? То есть цепочку координат, по которым нужно пройти? Аааа. Хелп, очень хочу понять это!
0
|
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
|
|
09.05.2018, 21:16 | 7 |
короче идея простая, есть точка а, ставим туда цифру 0, в соседние клетки ставим 1, в следующие 2 и т.д, такая типа волна распространяется, делаем до тех пор, очевидно, пока не дойдем до точки Б. От точки Б необходимо соединить клетки в порядке уменьшения записанного в них числа. Т.о. получим путь от А к Б. На бумажке нарисуй, там все достаточно очевидно.
Добавлено через 1 минуту реализаций дохрена ищи че-нибудь типа "a star java" (хотя я не вполне уверен, что описал именно а*)
0
|
4 / 4 / 0
Регистрация: 13.12.2016
Сообщений: 246
|
|
09.05.2018, 21:17 [ТС] | 8 |
Спасибо, то есть нужен массив int двумерный? А так нужно хранить где-то, что точка уже посещена?А препятствия нужно каким числом пометить?
0
|
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
|
|
09.05.2018, 21:34 | 9 |
а ты свое поле не в двумерном массиве хранишь?
если точка посещена, в ней, очевидно, должно быть какое-то число любым, которое тебе нравится, -1 например
0
|
4 / 4 / 0
Регистрация: 13.12.2016
Сообщений: 246
|
||||||
09.05.2018, 21:42 [ТС] | 10 | |||||
У меня двумерный, но char. Сейчас переделываю под int. Я помечаю стен и препятствия 9999 числом, а неизведанный клетки -1.
Но получается что для каждого соседа нужно запустить процесс поиска новых соседей, а как это сделать?
0
|
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
|
|
09.05.2018, 21:52 | 11 |
В клетке а стоит 0. В других -1, допустим. Ставим в соседние клетки 1, ищем все клетки, в которых стоит 1, ставим в их соседях 2, ищем все клетки, где стоит 2, ставим в соседях 3 и т.д.
0
|
4 / 4 / 0
Регистрация: 13.12.2016
Сообщений: 246
|
|||||||||||||||||||||
09.05.2018, 23:18 [ТС] | 12 | ||||||||||||||||||||
Добавлено через 5 минут
Добавлено через 1 час 5 минут Глянет кто? Я не понимаю... Он выводит числа волновые такие, но как найти путь нужный и короткий хз...
Теперь у меня как бы есть всевозможные пути до точки, и мне нужно выбрать такой, который короче или? Просто у меня сейчас есть разные пути, но по длине одинаковые(по числам). Как преобразовать обратно числа в путь? Типа начинаю с 0 рандомно кидать направление(в четыре стороны, пока не попадется 1? А потом так же для 1 кидать в стороны, пока не попадется 2? и Так до финиша? ########## # # #23456789 # #123##89 # #012##780 # #12345678 # #23456789 # #3456789 # #456789 # ########## Да и вот тут от 0 до 0(второй ноль для удобства поставил 0, там видимо 9 было). Можно пойти в разных направлениях, изначально. Если пойти вверх, то мы дойдем до 9 которая не приведет нас к финишу. Тоже самое и с самыми нижними девятками. Все два пути нас тут удовлетворяют, точнее две восьмерки, которые могут привести к нужной девятке... В общем надо еще одно условие ставить что ли? Как выбрать путь!!ААААА
0
|
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
|
|
09.05.2018, 23:25 | 13 |
Ты на форуме хочешь узнать, чего тебе надо? Удивительно, как естественный отбор плохо работает в современном мире.
Добавлено через 1 минуту На бумажке нарисуй руками все этапы работы алгоритма и посмотри, что получается в итоге.
0
|
4 / 4 / 0
Регистрация: 13.12.2016
Сообщений: 246
|
|
09.05.2018, 23:25 [ТС] | 14 |
Вот тут красным отмечен финиш. К нему можно придти разными вариантами. Как можно отобрать более-менее лучше варианты? Аж 4-мя вариантами можно дойти благополучно, но если рандомно брать изначально направление и проверять их на 1, то можно изначально выбрать путь, который не приведет никуда.
0
|
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
|
|
09.05.2018, 23:48 | 15 |
От девятки до нуля линию проводишь - получаешь путь. Очевидно, если таких путей несколько, то они равнозначны и не важно, какой из них выбирать. Можно выбрать все возможные пути и, добавив какие-то дополнительные критерии выбрать подходящий, но это уже другой вопрос.
0
|
4 / 4 / 0
Регистрация: 13.12.2016
Сообщений: 246
|
|||||||||||||||||||||
10.05.2018, 01:04 [ТС] | 16 | ||||||||||||||||||||
Добавлено через 6 минут
0
|
10.05.2018, 01:04 | |
10.05.2018, 01:04 | |
Помогаю со студенческими работами здесь
16
Зафиксировать траекторию движения объекта на видео Нарисовать на экране траекторию движения частицы Нарисовать на экране траекторию движения частицы в течение 5 секунд Нарисовать дуанты циклотрона и начертить траекторию движения частицы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |