Рисуем эллипс с помощью Черепашки в Python

К сожалению, в модуле Turtle нет отдельной команды для рисования эллипса. Попробуем его нарисовать. Для этого будем находить значения точек, составляющих периметр фигуры.
Чтобы найти координаты этих точек, возьмем каноническое уравнение эллипса.
где t это угол отклонения от оси абсцисс и ординат.
Чтобы построить законченный эллипс, необходимо будет рассчитать точки для всех значений градусов составляющих окружность, от 0 до 360.
Для начала подключим модуль turtle для управления нашей Черепашкой и модуль math для нахождения синуса и косинуса угла.
В качестве основных параметров у нас будут переменные a и b — это радиусы большей и меньшей окружности эллипса, задающие форму фигуры. Для рисования будем использовать команду goto() для перемещения Черепашки с текущего места в новую точку. Чтобы просчитать все значения x и y, воспользуемся циклом со счетчиком.
Из модуля math нам понадобятся функции sin() и cos(). Эти функции принимают значения в радианах. Чтобы перевести градусы в радианы воспользуемся функцией radians() из того же модуля math и запишем полученное значение в переменную rad.
В переменные dx и dy мы записываем текущее положения Черепашки, используя функции для получения текущих координат xcor() и ycor(), для x и y координат соответственно. Далее при вычислении расположения точки на периметре эллипса мы будем делать поправки на них, прибавляя эти значения к полученным координатам. Это позволит рисовать Черепашку из текущего положения, а не из центра координат.
Формулы рассчитывают положение координат из центра эллипса, при нахождении y координаты сделаем поправку на это же значение b. Это необходимо чтобы наша Черепашка при рисовании не перепрыгивала из центра эллипса на его окружность, а начинала рисовать с текущей позиции. При этом рисование эллипса будет идентично работе функции circle(), рисующей окружность.
Черепашка рисует эллипс с текущей позиции против часовой стрелки. Чтобы заставить рисовать эллипс по часовой стрелке, достаточно передать отрицательное значение второго аргумента b. Отрицательное значение a меняет направление рисования при движении. Черепашка начинает рисовать двигаясь не вперед, а назад.
Теперь оформим код в отдельную функцию для дальнейшего использования в различных проектах. Также добавим к функции дополнительные возможности, указание цвета линии, которым будет рисоваться эллипс и заливку фигуры.
В качестве аргументов будем передавать значения большого и малого радиусов нашего эллипса. В качестве необязательных параметров указываем цвет линии (по умолчанию рисуем черным) и цвет заливки (по умолчанию будет прозрачная).
turtle — Turtle graphics¶
Turtle graphics is a popular way for introducing programming to kids. It was part of the original Logo programming language developed by Wally Feurzeig, Seymour Papert and Cynthia Solomon in 1967.
Imagine a robotic turtle starting at (0, 0) in the x-y plane. After an import turtle , give it the command turtle.forward(15) , and it moves (on-screen!) 15 pixels in the direction it is facing, drawing a line as it moves. Give it the command turtle.right(25) , and it rotates in-place 25 degrees clockwise.
Turtle can draw intricate shapes using programs that repeat simple moves.

By combining together these and similar commands, intricate shapes and pictures can easily be drawn.
The turtle module is an extended reimplementation of the same-named module from the Python standard distribution up to version Python 2.5.
It tries to keep the merits of the old turtle module and to be (nearly) 100% compatible with it. This means in the first place to enable the learning programmer to use all the commands, classes and methods interactively when using the module from within IDLE run with the -n switch.
The turtle module provides turtle graphics primitives, in both object-oriented and procedure-oriented ways. Because it uses tkinter for the underlying graphics, it needs a version of Python installed with Tk support.
The object-oriented interface uses essentially two+two classes:
The TurtleScreen class defines graphics windows as a playground for the drawing turtles. Its constructor needs a tkinter.Canvas or a ScrolledCanvas as argument. It should be used when turtle is used as part of some application.
The function Screen() returns a singleton object of a TurtleScreen subclass. This function should be used when turtle is used as a standalone tool for doing graphics. As a singleton object, inheriting from its class is not possible.
All methods of TurtleScreen/Screen also exist as functions, i.e. as part of the procedure-oriented interface.
RawTurtle (alias: RawPen ) defines Turtle objects which draw on a TurtleScreen . Its constructor needs a Canvas, ScrolledCanvas or TurtleScreen as argument, so the RawTurtle objects know where to draw.
Derived from RawTurtle is the subclass Turtle (alias: Pen ), which draws on “the” Screen instance which is automatically created, if not already present.
All methods of RawTurtle/Turtle also exist as functions, i.e. part of the procedure-oriented interface.
The procedural interface provides functions which are derived from the methods of the classes Screen and Turtle . They have the same names as the corresponding methods. A screen object is automatically created whenever a function derived from a Screen method is called. An (unnamed) turtle object is automatically created whenever any of the functions derived from a Turtle method is called.
To use multiple turtles on a screen one has to use the object-oriented interface.
In the following documentation the argument list for functions is given. Methods, of course, have the additional first argument self which is omitted here.
Python Turtle Oval
In this Python Turtle tutorial, we will learn How to create an oval shape in Python Turtle and we will also cover different examples related to Turtle oval. And, we will cover these topics.
- Python turtle oval
- Python turtle oval visuals
Table of Contents
Python turtle oval
In this section, we will learn about how to create an oval with the help of a turtle in a python turtle.
Oval is a closed curve rounded figure. It looks like an egg. It has no corner or straight line we can say it just look like a circle but not a perfect circle. Here we draw an oval with help of a turtle. The turtle acts as a pen and draws the oval shape on the drawing board and there is a screen that acts as a drawing board.
Code:
In the following code, we will import the turtle library from turtle import *, import turtle as tur.
- tur.circle(rad,90) is used to draw an oval shape.
- tur.seth(-45) is used to tilt the shape to negative 45.
- drawoval(100) is used to call the draw method.
Output:
After running the above code we will get the following output in which we can see an oval shape is drawn on the screen it looks like an egg or ellipse.
![]()
Python turtle oval visuals
In this section, we will learn about how to draw oval visual arts with the help of a turtle in a python turtle.
Visual is an art that is used for drawing pictures and creating videos it also focuses on creating pieces of work. Here the oval visuals are drawn with the help of a turtle and drawing a beautiful shape that can attract people’s eyes and this oval shape visual is drawn on the drawing board here screen works as a drawing board.
Code:
In the following code, we will import the turtle library from turtle import *, import the turtle package import turtle as tur. The turtle() method is used to make objects.
- ws.setup(500,500) is used for setting the screen size.
- ws.bgcolor(‘black’) is used for giving the color to the pen.
- col=[‘cyan’,’blue’,’pink’,’purple’,’yellow’,’green’] is used to give the color to the pen for drawing the shape with the help of different colors.
- tur.speed(100) is used to give the speed to the turtle.
- drawoval(80) is used to call the function for drawing an oval shape.
- value+=10 is used for changing the orientation.
- tur.hideturtle() is used to hide the turtle from the screen.
Output:
After running the above code we get the following output in which we can see a beautiful oval visual art is drawn on the screen with help of a turtle.
Also, check some more related posts on Python Turtle.
So, in this tutorial, we discussed Python Turtle Oval and we have also covered different examples related to its implementation. Here is the list of examples that we have covered.
- Python turtle oval
- Python turtle oval visuals

I am Bijay Kumar, a Microsoft MVP in SharePoint. Apart from SharePoint, I started working on Python, Machine learning, and artificial intelligence for the last 5 years. During this time I got expertise in various Python libraries also like Tkinter, Pandas, NumPy, Turtle, Django, Matplotlib, Tensorflow, Scipy, Scikit-Learn, etc… for various clients in the United States, Canada, the United Kingdom, Australia, New Zealand, etc. Check out my profile.
«Черепашья графика» при помощи turtle, рисование при помощи алгоритма
Черепашья графика, turtle – принцип организации библиотеки графического вывода, построенный на метафоре Черепахи, воображаемого роботоподобного устройства, которое перемещается по экрану или бумаге и поворачивается в заданных направлениях, при этом оставляя (или, по выбору, не оставляя) за собой нарисованный след заданного цвета и ширины.
Проще: черепашка ползает по экрану и рисует. Мы управляем черепашкой на плоскости при помощи программы.
Начало работы. Движения
В первой строке необходимо добавить:
Мы командуем черепашкой простыми словами на английском языке. left, right – поворот налево и направо, forward и backward – движение вперед и назад. В программе каждое действие – вызов функции из модуля turtle. Простая программа:
Что произошло:
- Поворот направо на 90 градусов
- Движение вперед на 100 шагов (пикселей)
- Поворот налево на 90 градусов
- Движение назад на 100 шагов
Не похоже на черепашку, это ползающая стрелка! Исправим это:
Отлично! Теперь это черепашка, пусть и монохромная. Дополнительно, функция exitonclick() позволяет закрыть окно и завершить выполнение программы кликом мышкой по окну.
А еще можно использовать сокращенные названия функций: fd(100) вместо forward(100), rt вместо right, lt вместо left, bk вместо backward.
Геометрические фигуры
Рисуем простые геометрические фигуры:
- Прямая: просто движение вперед
- Квадрат: вперед, поворот на 90 градусов и так 4 раза. Повторение команд – значит, можно выполнить их в цикле for!
- Пятиконечная звезда: вперед, поворот на 144 градусов и так 5 раз.
Если мы хотим выполнить инструкции n раз, мы пишем их в цикле
Далее идут инструкции с отступом в 4 пробела. Код с отступами – тело цикла. Когда цикл завершается, отступы больше не ставятся.
Рисуем квадрат:
Скучно рисовать одинокие фигуры. Поэтому мы приготовились рисовать сразу несколько и теперь создаем отдельный экземпляр класса Turtle для каждой фигуры. Так мы можем менять цвет линии и другие параметры отдельно для каждой фигуры. Потом, когда мы захотим дорисовать или изменить параметры фигуры, у нее будут сохранены старые параметры. Их не надо будет устанавливать заново, как это было бы без отдельных экземпляров класса для каждой фигуры.
Звезда рисуется также:
Самостоятельно:
- Нарисуйте пятиконечную звезду (угол поворота 144 градуса).
- Квадрат и звезду в одной программе, на одном графическом поле, но с разными экземплярами класса Turtle.
- Восьмиконечную звезду (угол поворота 135 градусов).
- Фигуру из анимации в начале страницы.
Решения
Изменяем параметры во время движения
При отрисовке простых фигур черепашка возвращалась в исходную точку, и программа останавливалась, ожидая, когда будет закрыто окно. Если в цикле продолжить рисовать по прежним инструкциям, фигура будет нарисована заново по уже нарисованным контурам. А если ввести дополнительный угол поворота?

Мы также добавили:
- color(‘red’, ‘green’) определяет цвет линии и цвет заполнения. Черепашка теперь зеленая!
- begin_fill() и end_fill() обозначают начало и конец заполнения
Больше программирования!
Напишем обобщенную программу рисования выпуклых равносторонних многоугольников. num_sides – количество граней, side_length – длина грани, angle – угол поворота.
Что будет, если на каждом шаге увеличивать длину пути? В первый день 10 шагов, во второй – 20, далее 30, 40 и так до 200:
Координаты на плоскости
Положение на плоскости определяется двумя числами, x и y:

Черепашку в программе можно перемещать функцией goto(x, y). x и y – числа, или переменные. goto(0, 0) переместит черепашку в начало координат.
Вместо звезды-спирали мы получили 5 линий, расходящихся из точки начала координат.
Круг и точка
Не хватает плавных изгибов? На помощь приходят функции dot() и circle():

- изменили заголовок окна функцией title(),
- установили толщину линии – pensize(),
- установили цвет линии – pencolor(),
- Подняли черепашку перед перемещением – penup() и опустили после – pendown().
Самостоятельно:
- Используя код из примеров и функцию goto(), нарисовать галерею из 5 или более многоугольников на одном поле. Использовать экземпляр класса turtle.Turtle().
- Нарисованные многоугольники закрасить разными цветами. Пробуйте стандартные цвета или их шестнадцатеричное представление. Не забудьте кавычки вокруг названия или кода цвета!
Решения
- У нас есть два варианта нарисовать несколько фигур: используя отдельные классы и не используя их. Рассмотрим оба варианта.
- Без классов:
- Получается довольно многословно. С классами (начало):
- Так еще многословнее. Зачем нам понадобилось писать для каждой фигуры отдельный класс? Для того, чтобы подготовиться к написанию программы с помощью функций, которые помогут обобщить и сократить наш код.
Создадим функции, используя написанную ранее обобщенную программу рисования выпуклых равносторонних многоугольников. Функция prepare() делает все приготовления для рисования: переходит в нужную точку холста, устанавливает нужный цвет и дает команду заполнять цветом. У функции три входных параметра: координаты по осям X, Y и кодовое слово цвета.
Функция draw_polygon() – наш старый знакомый, так мы рисуем выпуклый многоугольник. У функции два входных параметра: количество граней и длина грани. - Получилось существенно сократить программу, и она стала более читаемой. Но повторяющиеся действия остались. Значит, есть еще работа для программиста! Будем рисовать все 5 фигур в цикле. Для этого все параметры соберем в списки, а внутри цикла будем брать значение параметра по индексу (номеру минус 1) в списке. Теперь всего 22 строки кода:
- Получились фигуры разного размера. Самостоятельно: Задать переменной внутри цикла длину грани так, чтобы фигуры казались (или являлись) равновеликими.
Делаем фигуры равновеликими
Площадь квадрата со стороной 100 пикселей – 10 000 квадратных пикселей. Вычислим площади всех фигур со стороной 100 от треугольника до 7-угольника. Формула площади правильного многоугольника содержит тангенс, поэтому «поверим на слово» результату, зависимости количество углов (вершин) – площадь:
- 3 – 4330.13
- 4 – 10000
- 5 – 17204.77
- 6 – 25980.76
- 7 – 36339.12
Изобразим ее на графике:

Получается, что площадь 7-угольника в 36339.12 / 4330.13 = 8.4 раза больше, чем площадь треугольника! Это очень заметно на рисунке:

Чтобы фигуры стали равновеликими, надо сделать длину грани вместо константы 100 – переменной, которая зависит от количества углов.
Как: приведем все площади к 10000. Для треугольника площадь увеличится на 10000 / 4330.13 = 2.31 раза. Для 7-угольника – уменьшится в 36339.12 / 10000 = 3.63 раз. Значит, стороны должны измениться в 1.52 и 0.52 раз соответственно, то есть, до 152 и 32.7 пикселей (снова «верим на слово»). Эту зависимость можно нащупать «на глаз», в чем и заключалось задание.
Наша программа без труда масштабируется до большего количества фигур:

Программа, в которой вычисляются точные значения:
Как построить график (если кто захочет):
- Поставить Matplotlib, набрав в командной строке
- Запустить программу
Другие полезные функции:
- turtle.setup(800, 400) устанавливает размеры окна в 800 на 400 пикселей
- turtle.setworldcoordinates(0, 0, 800, 400) устанавливает начало координат в точку 800, 400
- turtle.tracer(0, 0) отключает анимацию
- setpos(x, y) устанавливает черепашку (курсор) в позицию с координатами (x, y)
- seth(x) устанавливает направление в градусах. 0 – горизонтально направо (на восток), 90 – вверх (на север) и так далее
- hideturtle() скрывает черепашку (или стрелку, курсор)
- speed(x) изменяет скорость рисования. Например, speed(11) – почти моментальная отрисовка простых фигур
- clear() очищает холст от нарисованного
- reset() очищает холст и возвращает курсор в начало координат
Пример двух рисунков – экземпляров класса Turtle() – на одном полотне

Что произошло:
- Задали название окна,
- создали экземпляр класса Turtle под именем circ. Все изменения сохраняются для класса circ;
- цвет линии и заполняющий цвет,
- форму и размер курсора,
- установили 10-ю скорость
- продвинулись на 150 пикселей вперед от старта,
- начали заполнять фигуру цветом,
- нарисовали круг
- закончили заполнять цветом,
- Объявили переменную n и присвоили ей значение 10,
- создали новый экземпляр класса Turtle под именем t. У него нет настроек экземпляра класса circ!
- В цикле while: пока переменная n меньше или равна 50, рисовать круги радиусом n;
- после нарисованного круга увеличить переменную n на 10.
- Алгоритм рисования кругов прекратит рисовать круги после 4-го круга.
Итог: функции и классы на примере turtle
- Функция – фрагмент программного кода, к которому можно обратиться по имени. Иногда функции бывают безымянными.
- У функции есть входные и выходные параметры. Функция fd(150) – фрагмент программного кода, который двигает курсор вперед на заданное во входном значении количество пикселей (150). Выходного значения у функции fd() нет.
- Когда функцию надо выполнить, после ее названия пишут круглые скобки. fd – просто название, ничего не происходит. fd(100) – функция выполняется с входным параметром 100. Обычно названия функций пишут с маленькой буквы.
- Класс – программный шаблон для создания объектов, заготовка для чего-то, имеющего собственное состояние. Мы можем нарисовать прямоугольник и назвать его кнопкой, но это еще не кнопка, потому что у нее нет собственных свойств и поведения. Прямоугольник надо научить быть самостоятельной, отличной от других, кнопкой.
- Turtle – класс, его имя пишется с большой буквы. через оператор присваивания = мы создаем экземпляр класса: circ = turtle.Turtle(). Turtle – класс (шаблон, трафарет, заготовка), circ – его экземпляр (рисунок, набор уникальных цветов, штрихов и свойств). На картинке выше видно, что экземпляр класса circ богат установленными свойствами, а экземпляр t обладает свойствами по умолчанию: тонкая черная линия, треугольный курсор.
- Программирование с использованием классов и их экземпляров будем называть объектно-ориентированным программированием, ООП. объектно-ориентированный подход необходим при построении графического интерфейса пользователя, GUI.
Графический интерфейс средствами библиотеки turtle.
Нарисуем прямоугольник и сделаем его кнопкой: при нажатии кнопка исчезает и появляется круг:
Что произошло:
- Задали название и размеры (500 на 500 пикселей) окна,
- Создали экземпляр класса btn1 и спрятали курсор (черепашку),
- Нарисовали прямоугольник 80 на 30;
- подняли перо и перешли на координаты (11, 7);
- написали Push me шрифтом Arial 12-го размера, нормальное начертание. Попробуйте вместо normal ключевые слова bold (полужирный), italic (наклонный);
Задаем поведение кнопки:
- Функции turtle.listen() и turtle.onscreenclick() будут слушать (listen) и реагировать на клик по экрану (onscreenclick). Реакцией будет запуск функции btnclick(x, y)
- Напишем btnclick(x, y). У нее 2 входных параметра – координаты точки, куда мы кликнули. Наша задача: если клик был по кнопке, спрятать ее и показать оранжевый круг
- Мы помним: кнопка 80 на 30 пикселей от точки (0, 0). Значит, мы попали по кнопке, если x между 0 и 80 и y между 0 и 30. Условие попадания по кнопке: if 0<x<80 and 0<y<30:
- 1) Убираем кнопку: btn1.clear(), 2) создаем экземпляр класса ball = turtle.Turtle(), 3) устанавливаем ему нужные свойства.
Самостоятельно:
- Нарисовать вторую кнопку (не изменяя первую!), сделать обработчик нажатия: при клике программа завершается, выполняется функция exit()
- При нажатии на первую кнопку появляется случайная фигура: при рисовании фигуры использовать random:
Уточнения
- Чтобы окно не закрывалось сразу, мы использовали turtle.exitonclick(). Теперь, когда клик обрабатывается функцией, пишем в конце turtle.done().
- функция exit() самостоятельная, это не команда turtle. Писать turtle.exit() неверно.
- Случайная фигура – это любая фигура, при рисовании которой используются случайные числа. Например: Но есть и второй вариант: случайное число будет индексом списка и укажет на одну из заранее подготовленных неслучайных фигур: Таким приемом можно случайно выбирать цвета фигур. Функция choice делает тоже самое изящнее:
Управляем рисунком с клавиатуры
Итак, мы умеем рисовать фигуры разных форм и стилей, перемещать курсор в разные точки холста, а также обрабатывать клик мышкой по фигуре. Добавим к этим действиям обработку нажатий клавиш. Для этого существуют две функции:
- turtle.onkeypress(fun, key): вызывается функция fun при нажатии клавиши key
- turtle.onkey(fun, key): вызывается функция fun при отпускании клавиши key
Клавиша задается строкой с ее названием. Например, ‘space’ – пробел, ‘Up’ (с заглавной буквы) – стрелка вверх. Клавиши букв задаются заглавными, только если мы хотим нажать именно заглавную (с Shift или Caps Lock).
По нажатию клавиши мы будем перемещать фигуру. Для этого понадобятся функции, которые сообщают и изменяют координаты:
- xcor() и ycor() выдают координаты по x и y как дробные числа
- setx(x) и sety(y) устанавливают координаты. x и y – числа
Создадим экземпляр класса Turtle и выведем его координаты:
Получили вывод «0.0 0.0». Теперь напишем функцию up(), которая будет запускаться при нажатии стрелки вверх и перемещать наш circ на 10 пикселей вверх:
Очень похоже на нажатие мышкой! Функцию up() можно сократить до одной строчки:
Будет работать, но функции в одну строчку писать не принято. Для таких случаев используют анонимные функции: у них может вовсе не быть имени. В Python в качестве анонимных функций используются лямбда-выражения, мы их уже использовали для сортировки. Так будет выглядеть лямбда-функция up:
Она используется у нас только в одном месте, внутри функкии turtle.onkeypress(). А почему бы не соединить их вместе? Так будет выглядеть наша программа в сокращенном виде:
Всего 8 строк, и функции действительно не понадобилось имени! Как видим, язык Python дает возможность писать разными стилями, и мы можем выбирать на свой вкус: писать развернуто и красиво (как писал Гавриил Романович Державин) или кратко (как Эрнест Хемингуэй).
Самостоятельно:
- Добавить движение circ влево, вправо и вниз
- Скорость движения (у нас пока 10 пикселей за раз) сделать переменной
Соединяем все вместе
У нас уже есть кнопка с текстом и обработчик клика мышкой. Соединим все в одну программу:
Есть стартовый экран, управляемый с клавиатуры персонаж. Добавим препятствие, и уже почти готова игра!