furas.pl
# prywatne notatki - Python, Linux, Machine Learning, etc.

Rysowanie w Turtle - Okrąg, Łuk, Koło i Elipsa

WERSJA ROBOCZA WPISU

Okrąg

Do rysowania okręgu służy funkcja circle().

Dokumentacja: turtle - circle()

turtle.circle(radius, extent=None, steps=None)
radius
  • promień okręgu czyli odległość okręgu od jego środka.
  • jeśli promień jest dodatni to środek okręgu będzie na lewo od pozycji żółwia (w odległości radius) a żółw będzie poruszał się w lewo (przeciwnie do ruchu wskazówek zegara)
  • jeśli promień jest ujemny to środek okręgu będzie na prawo od pozycji żółwia (w odległości radius) a żółw będzie poruszał się w prawo (zgodnie z ruchem wskazówek zegara)
extent
  • jaka część okręgu (w stopniach 0-360) ma być narysowana jeśli chcemy otrzymać łuk zamiast okręgu.
  • None oznacza rysowanie całego okręgu.
  • wartość dodatnia rysuje do przodu (przeciwnie do ruchu wskazówek zegara).
  • wartość ujemna rysuje do tyłu (zgodnie z ruchem wskazówek zegara).
steps
  • okrąg jest rysowany za pomocą wieloboku o dużej ilości boków i steps (kroki) określa z ilu boków ma się składać ten wielobok.

Okrąg o promeniu 100 pikseli.

python - rysowanie w turtle - okrąg
import turtle

turtle.circle(100)

turtle.mainloop()

Wykorzystując ujemny promień można z tego samego miejsca narysować okrąg w inną stronę

Na poniższym rysunku górny okrąg powstał z dodatnim promieniem, a dolny z ujemnym.

python - rysowanie w turtle - steps=3
import turtle

turtle.circle(100)
turtle.circle(-100)

turtle.mainloop()

Z użyciem funkcji circle() i parametru steps można narysować dowolny wielobok foremny - w tym kwadrat i trójkąt.

steps=3

python - rysowanie w turtle - steps=3

steps=4

python - rysowanie w turtle - steps=4

steps=6

python - rysowanie w turtle - steps=6
import turtle

turtle.circle(100, steps=3)

turtle.mainloop()

Za pomocą wieloboku o dużej ilości boków można otrzymać okrąg.

import turtle

def wielobok(bok, kroki):
    kat = 360/kroki
    for _ in range(kroki):
        turtle.forward(bok)
        turtle.left(kat)

wielobok(15, 36)

turtle.mainloop()

Taka funkcja nie wymaga poodawania promienia lub średnicy okręgu więc trudno powiedzieć ile miejsca zajmie okrąg.

Wycinek okręgu / łuk

Za pomocą drugiego parametru extent (wyrażonego w stopniach) można rysować łuki

90 stopni

python - rysowanie w turtle - łuk 90 stopni

180 stopni

python - rysowanie w turtle - łuk 180 stopni

270 stopni

python - rysowanie w turtle - łuk 270 stopni
import turtle

turtle.circle(100, 90) # 180 270

turtle.mainloop()

Można też narysować listek

python - rysowanie w turtle
import turtle

turtle.circle(100, 90)
turtle.left(90)
turtle.circle(100, 90)
turtle.left(90)

turtle.mainloop()

lub kwiatek

python - rysowanie w turtle
import turtle

def listek(promien):
    turtle.circle(promien, 90)
    turtle.left(90)
    turtle.circle(promien, 90)
    turtle.left(90)

for x in range(8):
    listek(100)
    turtle.left(45)

turtle.mainloop()
python - rysowanie w turtle
import turtle

def listek(promien):
    turtle.circle(promien, 90)
    turtle.left(90)
    turtle.circle(promien, 90)
    turtle.left(90)

for x in range(5):
    listek(100)
    turtle.left(72)

turtle.left(36)

for x in range(5):
    listek(50)
    turtle.left(72)

turtle.mainloop()

lub płomyk

python - rysowanie w turtle
import turtle

def listek(promien):
    turtle.circle(promien, 90)
    turtle.left(90)
    turtle.circle(promien, 90)
    turtle.left(90)

turtle.left(45)
for x in range(1, 4):
    listek(x*50)

turtle.mainloop()

Wartości ujemne pozwala rysować do tyłu

-90 stopni

python - rysowanie w turtle - łuk 90 stopni

-180 stopni

python - rysowanie w turtle - łuk 180 stopni

-270 stopni

python - rysowanie w turtle - łuk 270 stopni
import turtle

turtle.circle(100, -90) # -180 -270

turtle.mainloop()

Ujemny promień pozwala wracać tą samą drogą do miejsca wyjścia

python - rysowanie w turtle
import turtle

for _ in range(8):
    turtle.circle(100, -90)
    turtle.circle(100, 90)
    turtle.left(45)

turtle.mainloop()

Pozwala też na narysowanie takiego kształtu

python - rysowanie w turtle
import turtle

for _ in range(2):
    turtle.circle(100, -90)
    turtle.left(90)
    turtle.circle(100, 90)
    turtle.left(90)

turtle.mainloop()

lub takiego

python - rysowanie w turtle
import turtle

for _ in range(2):
    turtle.circle(100, -90)
    #turtle.left(90)
    turtle.circle(-100, 90)
    #turtle.left(90)

turtle.mainloop()

Dodając do tego kwadrat narysowany za pomocą circle( ..., steps=4) mamy

python - rysowanie w turtle
import turtle

for _ in range(2):
    turtle.circle(100, -90)
    turtle.circle(-100, 90)

turtle.right(90)
turtle.circle(-100, steps=4)

turtle.mainloop()

Wykorzystanie ujemnego promienia pozwala na rysowanie zawijasa

python - rysowanie w turtle
import turtle

turtle.circle(100, 90)
turtle.circle(-100, 90)

turtle.mainloop()

lub sinusa

python - rysowanie w turtle
import turtle

turtle.right(90)

for _ in range(2):
    turtle.circle(50, 180)
    turtle.circle(-50, 180)

turtle.mainloop()

lub bąbla

python - rysowanie w turtle
import turtle

turtle.circle(100, 90)
turtle.circle(-100, 180)
turtle.circle(100, 90)

turtle.mainloop()

a po dorysowaniu oczu mamy ducha

python - rysowanie w turtle
import turtle

# bąbel
turtle.circle(100, 90)
turtle.circle(-100, 180)
turtle.circle(100, 90)

# przesunięcie na środek
turtle.penup()
turtle.backward(200)
turtle.left(90)
turtle.forward(150)

# lewe oko
turtle.left(90)

turtle.forward(25)
turtle.pendown()
turtle.circle(15)
turtle.penup()
turtle.forward(-25)

# prawe oko
turtle.left(180)

turtle.forward(25)
turtle.pendown()
turtle.circle(-15)
turtle.penup()
turtle.forward(-25)

# przesunięcie żółwia poniżej oczu aby udawał nos albo usta
turtle.right(90)
turtle.forward(50)

turtle.mainloop()

## Linia przerywana

Podnosząc i opuszczając pióro podczas rysowania łuków można otrzymać okrąg/łuk z linii przerywanej.

python turtle circle
import turtle

for _ in range(10):
    turtle.circle(100, 18)
    turtle.penup()
    turtle.circle(100, 18)
    turtle.pendown()

turtle.mainloop()
python turtle circle
import turtle

for _ in range(10):
    turtle.circle(100, 6)
    turtle.penup()
    turtle.circle(100, 18)
    turtle.pendown()

turtle.mainloop()

## Koło

Koło to okrąg z wypełnieniem.

Stosując turtle.begin_fill() i turtle.end_fill() można okrąg wypełnić kolorem.

python - rysowanie w turtle - koło
import turtle

turtle.begin_fill()
turtle.circle(100)
turtle.end_fill()

turtle.mainloop()

Aby zmienić kolor wypełnienia należy użyć turtle.fillcolor(kolor)

python - rysowanie w turtle - koło
import turtle

turtle.fillcolor('red')

turtle.begin_fill()
turtle.circle(100)
turtle.end_fill()

turtle.mainloop()

Dostępne nazwy kolorów

Aby narysować bez obwódki można nadać obwódce ten sam kolor co wypełnieniu turtle.color(kolor) lub podnieść pióro turtle.penup(). Nic nie daje zmiana grubości kreski na zero turtle.pensize(0) lub turtle.pensize(None)

python - rysowanie w turtle - koło
import turtle

turtle.color('red')

turtle.fillcolor('red')

turtle.begin_fill()
turtle.circle(100)
turtle.end_fill()

turtle.mainloop()
import turtle

turtle.penup()

turtle.fillcolor('red')

turtle.begin_fill()
turtle.circle(100)
turtle.end_fill()

turtle.pendown()

turtle.mainloop()
python - rysowanie w turtle - koło
import turtle

turtle.pensize(10)

turtle.color('green')

turtle.fillcolor('red')

turtle.begin_fill()
turtle.circle(100)
turtle.end_fill()

turtle.mainloop()

## Elipsa

Turtle nie ma funkcji do rysowania elipsy. Pozostaje samemu taką funkcję napisać albo wykorzystać fakt, że Turtle wykorzystuje obiekt Canvas (Płótno) z modułu Tkinter, które posiada funkcję create_oval() do rysowania okręgów i elips.

Ale o tym jest w osobnym wpisie: Rysowanie z Turtle - Płótno czyli Canvas i inne obiekty z Tkinter

## Inne

python - rysowanie w turtle - koło
import turtle

for _ in range(12):
    turtle.circle(100, 90)
    turtle.left(60)

turtle.mainloop()
python - rysowanie w turtle - koło
import turtle

for _ in range(8):
    turtle.circle(100, 180)
    turtle.right(45)

turtle.mainloop()
python - rysowanie w turtle - koło
import turtle

for _ in range(6):
    turtle.circle(25, 180)
    turtle.right(120)

turtle.mainloop()
python - rysowanie w turtle - koło
import turtle

for _ in range(9):
    turtle.circle(25, 180)
    turtle.right(140)

turtle.mainloop()
python - rysowanie w turtle - koło
import turtle

turtle.tracer(False)

for _ in range(12):
    turtle.circle(25, 180)
    turtle.right(100)

turtle.update()

turtle.mainloop()
python - rysowanie w turtle - koło
import turtle

turtle.tracer(False)

for _ in range(18):
    turtle.circle(50, 180)
    turtle.right(280)

turtle.update()

turtle.mainloop()
python - rysowanie w turtle - koło
import turtle

for x in range(10, 201, 10):
    turtle.circle(x, 90)
    turtle.penup()
    turtle.circle(x, -90)
    turtle.pendown()

turtle.mainloop()
python - rysowanie w turtle - koło
import turtle

turtle.tracer(False)

for x in range(10, 101, 10):
    turtle.circle(x, 180)
    turtle.penup()
    turtle.circle(x, -180)
    turtle.pendown()

turtle.update()

turtle.mainloop()
python - rysowanie w turtle - koło
import turtle

turtle.tracer(False)

for x in range(10, 101, 10):
    turtle.circle(x, 180)
    turtle.circle(-110+x, 180)
    turtle.penup()
    turtle.circle(-110+x, -180)
    turtle.circle(x, -180)
    turtle.pendown()

turtle.update()

turtle.mainloop()

multi-jin-jang-2

import turtle

turtle.tracer(False)

for x in range(0, 101, 10):
    turtle.circle(x, 180)
    turtle.circle(-100+x, 180)
    turtle.penup()
    turtle.circle(-100+x, -180)
    turtle.circle(x, -180)
    turtle.pendown()

turtle.update()

turtle.mainloop()
python - rysowanie w turtle - koło
import turtle

turtle.tracer(False)

for x in range(0, 101, 50):
    turtle.circle(x, 180)
    turtle.circle(-100+x, 180)
    turtle.penup()
    turtle.circle(-100+x, -180)
    turtle.circle(x, -180)
    turtle.pendown()

turtle.update()

turtle.mainloop()
python - rysowanie w turtle - koło
import turtle

turtle.circle(100)

turtle.circle(50, 180)
turtle.circle(-50, 180)

turtle.mainloop()
python - rysowanie w turtle - koło
import turtle

turtle.tracer(False)

turtle.circle(50, 180)
turtle.circle(-50, 180)

turtle.update()

turtle.mainloop()
python - rysowanie w turtle - koło
import turtle

turtle.tracer(False)

turtle.circle(35, 180)
turtle.circle(-65, 180)

turtle.circle(-35, -180)
turtle.circle(65, -180)

turtle.update()

turtle.mainloop()
python - rysowanie w turtle - koło
import turtle

turtle.tracer(False)

turtle.circle(45, 180)
turtle.circle(-55, 180)

turtle.circle(-45, -180)
turtle.circle(55, -180)

turtle.update()

turtle.mainloop()
python - rysowanie w turtle - koło
import turtle

turtle.tracer(False)

turtle.circle(70, 180)
turtle.circle(-30, 180)

turtle.circle(-25, -180)
turtle.circle(75, -180)

turtle.update()

turtle.mainloop()

Pasta do zębów

python - rysowanie w turtle - koło
import turtle

turtle.tracer(False)

#---

turtle.color('blue')
turtle.fillcolor('blue')

turtle.begin_fill()

turtle.circle(35, 180)
turtle.circle(-65, 180)

turtle.circle(-50, -180)
turtle.circle(50, -180)

turtle.end_fill()

#---

turtle.color('red')
turtle.fillcolor('red')

turtle.begin_fill()

turtle.circle(50, 180)
turtle.circle(-50, 180)


turtle.circle(-35, -180)
turtle.circle(65, -180)

turtle.end_fill()

#---

turtle.update()

turtle.mainloop()
python - rysowanie w turtle - koło
import turtle

turtle.tracer(False)

turtle.left(-90)

turtle.circle(25, 180)
turtle.circle(-75, 180)

turtle.circle(-70, -180)
turtle.circle(30, -180)

turtle.circle(70, 180)
turtle.circle(-30, 180)

turtle.circle(-25, -180)
turtle.circle(75, -180)

turtle.update()

turtle.mainloop()
python - rysowanie w turtle - koło
import turtle

turtle.tracer(False)

turtle.circle(-30, 180)
turtle.circle(70, 180)

turtle.circle(75, -180)
turtle.circle(-25, -180)

turtle.circle(-30, -180)
turtle.circle(70, -180)

turtle.circle(75, 180)
turtle.circle(-25, 180)

turtle.update()

turtle.mainloop()
python - rysowanie w turtle - koło
import turtle

turtle.tracer(False)

turtle.circle(-30, 180)
turtle.circle(70, 180)

turtle.circle(75, -180)
turtle.circle(-25, -180)

turtle.fillcolor('white')
turtle.begin_fill()

turtle.circle(-30, -180)
turtle.circle(70, -180)

turtle.circle(75, 180)
turtle.circle(-25, 180)

turtle.end_fill()

turtle.update()

turtle.mainloop()

Bałwanek z warkoczem

python - rysowanie w turtle - koło
import turtle

turtle.tracer(False)

turtle.left(180)

turtle.circle(-70, 180)
turtle.circle(30, 180)

turtle.circle(30, -180)
turtle.circle(-70, -180)

turtle.left(180)

turtle.fillcolor('white')
turtle.begin_fill()

turtle.circle(75, 180)
turtle.circle(-25, 180)

turtle.circle(-35, -180)
turtle.circle(65, -180)

turtle.end_fill()

turtle.update()

turtle.mainloop()

Wąsy

python - rysowanie w turtle - koło
import turtle

turtle.tracer(False)

turtle.left(-90)

turtle.circle(25, 180)
turtle.circle(-75, 180)

turtle.circle(-70, -180)
turtle.circle(30, -180)

turtle.circle(-25, 180)
turtle.circle(75, 180)

turtle.circle(70, -180)
turtle.circle(-30, -180)

turtle.left(180)

turtle.update()

turtle.mainloop()
python - rysowanie w turtle - koło
import turtle

turtle.tracer(False)

turtle.left(90)

turtle.circle(25, 180)
turtle.circle(-75, 180)

turtle.circle(-70, -180)
turtle.circle(30, -180)

turtle.circle(-25, 180)
turtle.circle(75, 180)

turtle.circle(70, -180)
turtle.circle(-30, -180)

turtle.left(180)

turtle.update()

turtle.mainloop()
python - rysowanie w turtle - koło
import turtle

turtle.tracer(False)

turtle.left(90)

turtle.begin_fill()
turtle.circle(25, 180)
turtle.circle(-75, 180)

turtle.circle(-70, -180)
turtle.circle(30, -180)
turtle.end_fill()

turtle.begin_fill()

turtle.circle(-25, 180)
turtle.circle(75, 180)

turtle.circle(70, -180)
turtle.circle(-30, -180)

turtle.end_fill()

turtle.left(180)

#turtle.left(180)
#turtle.circle(50)

turtle.update()

turtle.mainloop()
python - rysowanie w turtle - koło
import turtle

turtle.tracer(False)

turtle.left(-90)

turtle.circle(-70, -180)
turtle.circle(30, -180)

turtle.circle(25, 180)
turtle.circle(-75, 180)

turtle.circle(70, -180)
turtle.circle(-30, -180)

turtle.circle(-25, 180)
turtle.circle(75, 180)

turtle.update()

turtle.mainloop()
python - rysowanie w turtle - koło
import turtle

turtle.tracer(False)

turtle.left(90)

turtle.circle(-70, -180)
turtle.circle(30, -180)

turtle.circle(25, 180)
turtle.circle(-75, 180)

turtle.circle(70, -180)
turtle.circle(-30, -180)

turtle.circle(-25, 180)
turtle.circle(75, 180)

turtle.update()

turtle.mainloop()
python - rysowanie w turtle - koło
import turtle

turtle.tracer(False)

turtle.circle(50, 180)
turtle.circle(-50, 180)
turtle.circle(-100, 180)

turtle.update()

turtle.mainloop()
python - rysowanie w turtle - koło
import turtle

turtle.tracer(False)

for _ in range(4):
    turtle.circle(50, 180)
    turtle.circle(-50, 180)
    turtle.circle(-100, 180)
    turtle.left(-90)


turtle.update()

turtle.mainloop()
python - rysowanie w turtle - koło
import turtle

turtle.tracer(False)

for _ in range(5):
    turtle.circle(50, 180)
    turtle.circle(-50, 180)
    turtle.circle(-100, 180)
    turtle.left(-90-18)

turtle.update()

turtle.mainloop()
python - rysowanie w turtle - koło
import turtle

def lezka1():
    turtle.circle(50, 180)
    turtle.circle(-50, 180)
    turtle.circle(-100, 180)

def lezka2():
    turtle.circle(-50, 180)
    turtle.circle(50, 180)
    turtle.circle(100, 180)

turtle.tracer(False)

lezka1()
lezka2()

turtle.update()

turtle.mainloop()
python - rysowanie w turtle - koło
import turtle

def lezka1():
    turtle.circle(25, 180)
    turtle.circle(-25, 180)
    turtle.circle(-50, 180)

def lezka2():
    turtle.circle(-25, 180)
    turtle.circle(25, 180)
    turtle.circle(50, 180)

turtle.tracer(False)

lezka1()
turtle.penup()
turtle.left(90)
turtle.forward(50)
turtle.left(-90)
turtle.pendown()

lezka2()
turtle.penup()
turtle.left(-90)
turtle.forward(50)
turtle.left(90)
turtle.pendown()

turtle.update()

turtle.mainloop()
python - rysowanie w turtle - koło
import turtle

def lezka1():
    turtle.circle(25, 180)
    turtle.circle(-25, 180)
    turtle.circle(-50, 180)

def lezka2():
    turtle.circle(-25, 180)
    turtle.circle(25, 180)
    turtle.circle(50, 180)

turtle.tracer(False)

turtle.left(90)

for _ in range(4):
    lezka1()
    turtle.penup()
    turtle.left(90)
    turtle.forward(50)
    turtle.left(-90)
    turtle.pendown()

    lezka2()
    turtle.penup()
    turtle.left(-90)
    turtle.forward(50)
    turtle.left(90)
    turtle.pendown()


turtle.update()

turtle.mainloop()
Książki: python-dla-kazdego-podstawy-programowania python-wprowadzenie python-leksykon-kieszonkowy python-receptury python-programuj-szybko-i-wydajnie python-projekty-do-wykorzystania black-hat-python-jezyk-python-dla-hackerow-i-pentesterow efektywny-python-59-sposobow-na-lepszy-kod tdd-w-praktyce-niezawodny-kod-w-jezyku-python aplikacje-internetowe-z-django-najlepsze-receptury