Задать вопрос

Как создать траекторию, пространство, координаты?

Работаю над программой для диплома , основа которой - движение судов в море. Есть наше судно , есть и другие суда , которые передают нам свои данные по типу скорости , направления движения и кратчайшее расстояние до нашего судна.

Программа должна будет вычислять , что нам делать в случае , если другое судно находится в некоторой близости от нас .
К этому всему рассматривать будут ситуации в двух вариантах : Открытом море и Узкой местности ( к примеру при движении по реке или рядом с сушей )

Само мясо - это не вывести на экран , как движутся суда , не проиллюстрировать ситуацию возможного столкновения. Мясо в том , что нужно просто рассчитать , может ли быть опасное сближение двух кораблей - моего и чужого.

И я пока понятия не имею , по какой методике это можно сделать. Может быть использовать координаты ? Может просто математическую формулу , если таковая найдется?

Просто представьте шахматную доску , где плывут два корабля , нам известна и скорость , и направление движения. В Теории можно рассчитать , как пройдет их маршрут и может ли быть опасная ситуация.

Но что делать с узкой местностью ? Вот с этим я падаю ниц.
Пока не представляю , как можно вбить в питон то , что справа и слева есть узкий коридор , и в нем сильно не развернешься. А впереди еще другое судно навстречу.

Вообще не работал с чем-то подобные в плане координат.
Может быть , и без координат можно обойтись , просто основываясь на том , что судно движется в определенном коридоре по своей назначенной траектории , назад оно не ходит , и повернуть может только на 90 градусов вправо или лево.

Пожертвуйте идей с реализацией , пожалуйста!
Может быть в питоне есть что-то для расчета и предвидения траектории , а может метод с координатами это выстрел из пушки по воробьям.
  • Вопрос задан
  • 100 просмотров
Подписаться 1 Средний 10 комментариев
Решения вопроса 1
Lelush
@Lelush Автор вопроса
Всем большое спасибо за участие в размышлениях , пока что я дошел до такого метода реализации проекта:

Изначальной задачей было определить , столкнутся ли курсы двух кораблей , и если столкнутся , то могут ли столкнуться корабли в этой точке.

Из данных нам было известно : курс корабля в градусах ( курс берется от севера ) , его скорость. Курс второго корабля , его скорость , кратчайшее расстояние между двумя кораблями и пеленг ( градус , в котором находится второе судно относительно нашего , считая от севера )

Далее можно создать треугольник. Прикреплю рисунок с кучей пометок.

63b74a7a6119a925876310.jpeg

Если вкратце , то зная значения пеленга , кратчайшего расстояния и курсов двух кораблей мы можем построить треугольник , два угла между курсами и кораблями рассчитать довольно просто . После этого по теореме синусов мы можем найти третий угол , а главное - расстояния , которые осталось пройти двум кораблям до точки сближения.
Ну а после подсчитать время , за которое корабли дойдут до этой точки , основываясь на их скоростях. Если время одинаково или близко к таковому , то суда могут столкнуться. В этом случае можно принимать решение об изменении курса или скорости.

Еще раз спасибо всем и извините за нечетко поставленный вопрос или формулировку , как и ожидалось , координаты в реализации проекта не понадобились .
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@kr_ilya
Тут требуется определить нужную структура данных.
Самый простой вариант - двумерный массив, в котором значения 0 - ничего нет, 1 - есть корабль, при желании можно не ограничиваться на 0 и 1 и добавить другие значения, напр. 2 - для обозначения берега.
Для лучшего понимания можно представить себе лабиринт, в котором 0 - нет стены, 1 - есть стена.
Ответ написан
hint000
@hint000
у админа три руки
Просто представьте шахматную доску , где плывут два корабля
Так у вас задание как сформулировано? Одно дело на шахматной доске моделировать (нужны чёткие правила. судно занимает одну клетку? если по соседним клеткам суда разошлись - это не считается за столкновение?), совсем другое дело - на реалистичной местности, но тогда будет непонятно, к чему упомянута шахматная доска.
Движение судов почти везде правостороннее. Когда вы едете на автомобиле по дороге без разметки, у вас не возникает вопрсов, как не столкнуться? А дорога обычно гораздо более узкая, чем река или канал. Простейшая стратегия: заметили встречное судно - держите курс посередине между этим судном и границей фарватера, оставляя встречное судно слева от себя, только-то и всего. Но это предполагает, что и встречное судно соблюдает правила. Если же судно идёт наперерез, правым бортом к вам, тогда нужно наплевать на правила и уклоняться в противоположную сторону (полагаю, в рамках учебного задания можно не рассматривать такой случай).

Помните, что структура данных не менее важна, чем алгоритм. Вы уже представляете себе, как у вас будут храниться исходные данные? Если нет, то вот прямо с этого и начинайте, а не с алгоритма.

Какие данные у вас есть о встречном судне? Только пеленг (азимут) и расстояние? Или ещё курс и скорость? Габариты вашего судна и габариты встречного судна известны и их нужно учитывать? Конечно, для упрощения задачи все суда можно считать шариками одинакового размера. И вернуться к этому вопросу, когда всё получится с таким упрощенным вариантом.

нужно просто рассчитать , может ли быть опасное сближение двух кораблей - моего и чужого.
И я пока понятия не имею , по какой методике это можно сделать.
Сильно зависит от характеристик вашего судна (можно предположить что на встречном судне вас не заметили и не пытаются уйти от столкновения, всё зависит только от вас). Одно дело, если вы на крохотном катерке (вы просыпаетесь, когда до столкновения осталось 10 метров, и успеваете ещё отрулить в сторону, одновременно давая полный вперёд); другое дело, если вы на океанском лайнере, танкере, сухогрузе (вы можете не успеть отрулить, даже если до встречного судна ещё 100 метров). Так что "опасность" сближения зависит не только от расстояния и курсов, но и от размеров и массы вашего судна и встречного судна.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы