Удав, Задача на координаты и направление |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Удав, Задача на координаты и направление |
1qsd |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 11 Пол: Мужской Реальное имя: Kost Репутация: 0 |
Помогите решить вот эту несложную задачу. Преподаватель говорит, что решать её нужно как то через матрицы.
Удав расположен в виде нескольких линий, из которых каждая следущая перпендикулярна предыдущей. Направление каждой линии и её протяженность задаются буквами "L" , "R" и числом. Например 25L15R5 ("25" - длина линии = 25, "L" - поворачивает на 90 градусов влево, "15" - длина линии = 15 , "R" - поворачивает на 90 градусов вправо , "5" - длина линии = 5). Определить, пересечет ли он себя. Сообщение отредактировано: 1qsd - |
Lapp |
Сообщение
#2
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
2 Malice:
Случай с подходом к хвосту сзади лечится добавлением минус-первой точки к массиву координат; ее координаты, как и координаты нулевой точки, нулевые: 0,0. Остальные звенья это нулевое звено не пересечет, так как оно нулевой длины. Соответственно, цикл while нужно начинать с (i+1)mod 2. 2 Lapp: (разговоры самого-с-собой - первый признак помешательства.. ) Проверка на разворот не спасает: разворот может быть долгий: 10L0R0L0L5 Исключать пары нулевых звеньев типа L0R0 ? нет.. Ведь может и не быть пересечения после разворота: 10L0L0L5 - это просто поворот направо.. Неужели Michael_Rybak все же прав (сам того не зная ), и придется проверять параллельные звенья тоже??.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Lapp |
Сообщение
#3
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Неужели Michael_Rybak все же прав (сам того не зная ), и придется проверять параллельные звенья тоже??.. "Долгие повороты" не нужно учитывать никаким специальным образом при исследовании разворота. Дело в том, что последовательность L0R0L0L0 - уже содержит перпендикулярное звено, которое будет учтено. Так что нужно отслеживать только действительный (быстрый) поворот назад, типа 10L0L5. Это я вставил, и оно, вроде, работает, но.. ..Но тут другая проблема вылезает . Действительно, чередующаяся последовательность нулевых звеньев вызовет ложное срабатывание: 10L0R0L0R0L5 - представляет собой прямую линию, но в середине есть три нулевых звена, которые все имеют общую точку с ненулевыми... Вот такая фигня.. Может, запретить нулевые звенья совсем?.. Или убирать их при парсинге.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Текстовая версия | 25.04.2024 14:33 |