Условие: № 47246
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен.
Черепахе был дан для исполнения следующий алгоритм:
Повтори 4 [Вперёд 14 Направо 120]
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует.
from turtle import *
left(90)
speed(10)
l = 20
for _ in range(4):
forward(14*l)
right(120)
done()
Описание к первой части решения задачи через библиотеку turtle
- импортируем все методы (*) библиотеки turtle
- -
- обязательно разворачиваем голову Черепахи вдоль оси ординат (как сказано в условии)
- увеличим скорость отрисовки пера, чтобы не ждать
- добавляем переменную L, отвечающую за масштаб фигуры на холсте
- удовлетворяя условию, повторяем 4 раза действия:
- вперед 14 шагов (пикселей на масштаб L)
- разворачиваем направление головы вправо на 120 градусов (не зависит от масштаба)
- команда done() необходима для фиксации отрисованной фигуры на холсте (чтоб она не закрывалась).
from turtle import *
left(90)
speed(10)
l = 20
for _ in range(4):
forward(14*l)
right(120)
color('red')
up()
for x in range(0, 15):
for y in range(0, 15):
goto(x * l, y * l)
dot('blue')
done()
Продолжим описание первого варианта решения задачи через библиотеку turtle, вторая часть:
10. меняем цвет пера на красный (или любой другой)
11. команда up() поднимает перо, чтобы не было лишних элементов на холсте
12. так как наша фигура лежит в первой четверти (можно увидеть по картинке и началу отрисовки), то перебираем x в диапазоне от 0 до большего шагу числа, чтобы покрыть всю фигуру
13. аналогичный перебор делаем для переменной y
14. команда goto() переносит наше перо в координату, не забываем про масштаб L
15. ставим точку на (цвет можно было поменять здесь, как указано на картинке)
Рассмотрим подробнее второй вариант решения задачи через библиотеку turtle :
7. возьмем полученную нами фигуру и зальем ее через begin_fill() и end_fill(), важно взять такое кол-во повторений итераций цикла for, чтобы фигура отрисовывалась ровно один раз. Не должно быть повторных кругов по кромке фигуры
11. заканчиваем заливку
12. создаём объект, используя метод getcanvas()
13. и счетчик count, для счета точек лежащих внутри заливки (фигуры)
14. этот вариант решения подходит для очень больших фигур, поэтому берем диапазон от -100 до 100 с соблюдением масштаба
15. создаем “прямоугольник” через метод find_overlapping(x, y, x, y) , но за счет передачи в него одной и той же точки - получается не прямоугольник, а точка в заливке
16. если точка лежит внутри заливки и совпадает с ее цветом
17. то добавляем такую точку к счетчику -
18. программа выведет в консоль подходящее число точек