19

Fail story: Пифагоров велосипед.⁠⁠

Приветствую тебя, читатель. Сегодня я начну небольшой цикл заметок о разработке своей очень простенькой, по факту, игры. Делал я её не то что бы очень долго, ибо c# и unity я знаю более менее. Сегодня чуток о мат. части, но для начала немного предыстории. Я не очень часто сталкивался с подобными задачами, чаще занимаясь проектированием всякого: мои отношения с математикой обычно начинались и заканчивались на олимпиадном программировании, которое я подзабросил пару лет назад. Но при этом мне всегда было интересно поведение алгоритмов, созданных мною. Ну да чуть ближе к сути.

Для игры мне потребовалось решить простую задачу: требуется написать функцию, которая выдает следующую ближайшую к цели точку так, чтобы траектория движения персонажа проходила по прямой. Однако задачу я себе решил слегка усложнить, оставив в качестве входных переменных только позицию игрока и точку назначения. Повторюсь, что ожидаемый результат - движение по прямой, насколько это возможно. Подумав, не подумав, что задача плёвая, я наскоро закодил первый пришедший в голову алгоритм, в котором вычислялись расстояния до точки назначения от (x+1;y) и (x;y+1), где (x;y) - координаты персонажа(для упрощения опустим подробности, что точка назначения может быть не только в первой четверти относительно игрока), после чего брала точку с минимальным расстоянием. Казалось бы: почему это может не работать. А вот, собственно, почему:

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

Задавшись тем же вопросом: а почему это может не работать, я закодил и это поведение и получил вот это:

На этом этапе я перестал верить в жизнь и ушёл в запой (какао - тоже алкоголь). Однако вернувшись я прошёлся итеративно по алгоритму с понял, что в никуда потратил день жизни, и без задания координат точки отправления задача не разрешима. Затем все стало куда проще - поведение стало таким, каким я себе его представлял изначально:

По сути это та же предыдущая реализация со сравнением углов, только не от текущей точки, а от точки отправления.

Мораль сей басни такова: solid, kiss, scrum, agile и прочие заморские термины безусловно полезны для любой разработки, но все-таки на codeforces для разминки периодически все же надо заходить, что я всем и советую делать. Впрочем, если кто знает способ решения задачи, не вводя дополнительные параметры - прошу в комментарии.

P.S. Сама игра на поздней альфе, если кому интересно - дам ссылку в следующих заметках.

P.P.S. Первопост, прошу кидаться исключительно мягкими камнями.

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

10
Автор поста оценил этот комментарий

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества