Исполнитель Цапля действует на плоскости с декартовой системой координат. В начальный момент Цапля находится в начале координат, её клюв направлен вдоль положительного направления оси ординат, клюв опущен. При опущенном клюве Цапля оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует три команды: и радиусом r, градусная мера дуги равна α, движение по дуге идёт по часовой стрелке.
Запись
Цапле был дан для исполнения следующий алгоритм:
Направо 180 Вперёд 2 Направо 90 Вперёд 40 Направо 90 Вперёд 2 Повтори 4 [Дуга 5, 5, 0, 180].
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует.
Приведём решение на языке Python.
import turtle
t=turtle.Turtle()
t.reset()
t.seth(90)
t.width(2)
t.speed(20)
k = 10 #коэффициент для увеличения масштаба
t.right(180)
t.forward(2*k)
t.right(90)
t.forward(40*k)
t.right(90)
t.forward(2*k)
t.forward(2)
for i in range(4):
t.seth(90)
t.circle(-5*k,180)
t.penup()
for x in range(0,-12,-1):
for y in range(-2,8):
t.goto(x*k , y*k )
t.dot(5)
turtle.mainloop()
Посчитаем количество точек в одном секторе (48) и умножим их на количество секторов (4), плюс количество точек на границе секторов (по одной на границу). Итоговый ответ 48 · 4 + 3 = 195.
Ответ: 195.
Приведём решение Сергея Стрелюхина на языке Python.
from turtle import *
k = 5; speed(0); color('black','red'); hideturtle(); begin_fill()
seth(90); right(180); fd(2*k); right(90); fd(40*k); right(90); fd(2*k)
for i in range(4):seth(90); circle(-5*k,180)
end_fill(); sc = getcanvas()
otv = ['in' if (h:=sc.find_overlapping(x,y,x,y)) and sc.itemcget(h[-1],'fill')=='red' else 0\
for x in range(-100*k,100*k,k) for y in range(-100*k,100*k,k)]
print(otv.count('in'))
Приведём построение рисунка Бориса Савельева на языке КуМир.
использовать Черепаха
алг
нач
опустить хвост
вправо(180)
вперед(2)
вправо(90)
вперед(40)
вправо(90)
вперед(2)
нц 4 раз
нц 180 раз
вперед(0.08726646259971647)
вправо(1)
кц
вперед(0.08726646259971647)
влево(180)
кц
кон

