Алгоритм решения задания 14. Часть 1
Учимся решать 15 задания первого типа
Читать
Исполнитель Черепаха действует на плоскости с декартовой системой координат.
В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост поднят.
При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения.
У исполнителя существует 6 команд: Поднять хвост, означающая переход к перемещению без рисования; Опустить хвост, означающая переход в режим рисования; Вперёд n (где n — целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова; Назад n (где n — целое число), вызывающая перемещение в противоположном голове направлении; Направо m (где m — целое число), вызывающая изменение направления движения на m градусов по часовой стрелке; Налево m (где m — целое число), вызывающая изменение направления движения на m градусов против часовой стрелки.
Запись Повтори k [Команда 1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз.
Черепахе был дан для исполнения следующий алгоритм:
Направо 30 Повтори 3 [Направо 150 Вперёд 6 Направо 30 Вперёд 12]
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует.
import math as m
from turtle import *
# Базовая настройка
tracer(1) # Отключаем анимацию
# Переменные
angles = [] # Углы
coords = [] # Координаты вершин
count = 0 # Подсчет количества точек
lt(90) # Поворот по положительному направлению оси ординат
rt(30)
# --- Начало алгоритма --- #
for i in range(2):
if i < 2:
angles.append(heading())
coords.append((xcor(), ycor()))
rt(150)
fd(6)
rt(30)
fd(12)
# --- конец алгоритма --- #
update()
k_1 = m.tan(m.radians(angles[0]))
b_1 = coords[1][1] - k_1 * coords[1][0]
# Поиск точек внутри фигуры,
# ограниченной ур-ми прямых вида y = kx+b
# частный случай: две стороны параллельны Ох (y=-5 и y=0)
for x in range(-5, 0):
for y in range(-16, 0):
if k_1 * x + b_1 < y < k_1 * x:
count += 1
print(count)
exitonclick()
