Задание 6
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует 6 команд: Поднять хвост, означающая переход к перемещению без рисования; Опустить хвост, означающая переход в режим рисования; Вперёд n (где n – целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова; Назад n (где n – целое число), вызывающая передвижение в противоположном голове направлении; Направо m (где m – целое число), вызывающая изменение направления движения на m градусов по часовой стрелке, Налево m (где m – целое число), вызывающая изменение направления движения на m градусов против
часовой стрелки.
Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз.
Пример 1
Черепахе был дан для исполнения следующий алгоритм:
Повтори 2 [Вперёд 17 Налево 90 Вперёд 10 Налево 90]
Поднять хвост
Назад 4 Направо 90 Назад 3 Налево 90
Опустить хвост
Повтори 2 [Вперёд 40 Направо 90 Вперёд 10 Направо 90]
Определите, сколько точек с целочисленными координатами будут находиться внутри объединения фигур, ограниченного заданным алгоритмом линиями, включая точки на линиях.
Пример 2
В этой задаче отличие - хвост в начале поднят. Черепахе был дан для исполнения следующий алгоритм:
Повтори 3 [Опустить хвост
Повтори 2 [Вперёд 10 Направо 90 Вперёд 10 Направо 90]
Поднять хвост
Вперёд 5 Направо 90 Вперёд 5 Налево 90]
Определите в сантиметрах длину замкнутой ломаной, которая является границей объединения фигур, очерченных заданным алгоритмом линиями. В ответе укажите только число. Единицы измерения указывать не нужно.
Пример 3
В этой задаче отличие - хвост в начале поднят. Черепахе был дан для исполнения следующий алгоритм:
Вперёд 100 Направо 90 Вперёд 100 Направо 30 Опустить хвост
Повтори 10 [Вперёд 25 Направо 90]
Определите, сколько точек с целочисленными координатами будут находится внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует.
Теория
При решении задачи номер 6 необходимо проанализировать движение указанного объекта - черепахи, обычно траектория движения - замкнутая ломаная линия. Возможно нарисовать траекторию вручную - подходит для определения периметра (или количества точек) прямоугольных областей. Но как Вы будете рисовать линию под углом 30 или 60 градусов? Эту траекторию легко изобразить с помощью модуля turtle на языке Python. А если задача будет заключатся в подсчете количества точек внутри какой-либо области, то лучше запомнить основные команды модуля turtle. Разбор модуля будет опубликован позже. Если количество точек большое, то не обойтись без программы.
Решение
Пример 1
Для решения данной задачи изобразите траекторию движения черепахи - быстрее на бумаге (схематично, не соблюдая масштаба, для сдающих профиль по математике - это просто). Получатся 2 прямоугольника. Осталось подсчитать сколько точек попадает в каждый прямоугольник, сложить эти количества и вычесть количество точек в пересечении (т.к. они суммируются 2 раза).
Количество точек в синем прямоугольнике 18*11=198, в коричневом 41*11=451. В пересечении 18*4=72. Так как включены и точки на линиях, то к длине отрезка не забудьте прибавить 1. Итого получаем 198+451-72=577. Ответ 577.
Пример 2
Для решения данной задачи, аналогично примеру 1 изобразите траекторию движения черепахи - быстрее на бумаге (схематично, не соблюдая масштаба). Получатся 3 пересекающихся квадрата.
Осталось подсчитать периметр. Он равен 80.
Пример 3
Для решения данной задачи, аналогично примеру 1 изобразите траекторию движения черепахи - быстрее на бумаге (схематично, не соблюдая масштаба). Получатся квадрат, стороны которого повернуты на 30 градусов по часовой стрелке. Область большая и подсчитывать количество точек внутри квадрата (порядка 600 точек) практически не реально.
Каждая из сторон квадрата задается линией с уравнением y=kx + b. Прямая AB проходит через точку A (100;100) с k=tg(-30°), а AD с k=tg(60°), тогда для определения коэффициента b подставляем координаты точки A в уравнение прямых AB и AD. Аналогично учитывая сдвиги вниз получаем уравнения для CD и BC.
Далее составляем простую программу (Python) перебирая целые точки в диапазоне по x от 50 до 150, а по y от 0 до 100, подсчитываем количество точек ниже прямых AB и AD и выше прямых CD и BC.
Ответ
Пример 1: 577 (Время не более 5 минут)
Пример 2: 80 (Время не более 5 минут)
Пример 3: 625 (Время не более 15 минут)