Rysowanie w Turtle - Wstęp
Uwagi
W przykładach nie stosuje from <modul> import * aby było widać, z jakich modułów pochodzą jakie funkcje. Z powodu nieczytelności import * jest niezalecane także przez dokument PEP 8 -- Style Guide for Python Code (wyszukaj import *).
W turle niektóre funkcje mają także skrócone nazwy - przykładowo fd() jako skrót dla forward(). Dla czytelności przykładów stosuje jednak tylko pełne nazwy. Przy pisaniu na własny użytek stosował bym jednak wersje skrócone bo to jednak mniej pisania.
O przykładach dostarczonych wraz z Pythonem: Rysowania w Turtle - przykłady dostarczane z Pythonem
Wartości ujemne
turtle pozwala na ujemne wartości w forward()/backward() i wtedy rysuje w przeciwną stronę.
forward(-100) daje to samo co backward(100).
turtle pozwala też na ujemne wartości w left() / rigth() i wtedy skręca w przeciwną stronę.
left(-45) daje to samo co right(45).
Można też stosować kąty większe niż 360 - bo 360+X stopni to to samo co X stopni.
left(360 + X) daje to samo co left(X). I tak samo jest z right().
mainloop() | done()
Zamykanie przez kliknięcie przycisku zamykającego okno [X]
turtle.mainloop()
Zamykanie przez kliknięcie w dowolnym miejscu okna
turtle.exitonclick()
odpowiednik powyższego to
turtle.onscreenclick(lambda x,y:turtle.bye()) turtle.mainloop()
Kod źródłowy
Moduł turtle jest napisany w czystym Pythone - bez żadnych bibliotek w C - więc można zobaczyć jego kod.
import turtle print(turtle.__file__)
Powyższe wyświetla ścieżkę do pliku z kodem źródłowym modułu turtle - u mnie to jest /usr/lib/python3.7/turtle.py - i można to otworzyć w dowolnym edytorze tekstu lub IDE.
Pod Linux można nawet otworzyć to wprost ze skryptu w domyślnym programie
import turtle import os os.system('xdg-open ' + turtle.__file__)
https://stackoverflow.com/a/435669/1832058
import subprocess import os if sys.platform.startswith('darwin'): subprocess.call(('open', filepath)) elif os.name == 'nt': # For Windows os.startfile(filepath) elif os.name == 'posix': # For Linux, Mac, etc. subprocess.call(('xdg-open', filepath))
Wielobok
Pięciokąt foremny i pentagram - rysowanie i liczenie powierzchni.
http://www.obliczeniowo.com.pl/284
Sześciokąt foremny i heksagram - rysowanie i liczenie powierzchni.
Inne
https://www.root.cz/clanky/zelvi-grafika-dokonceni/
Kąty w kolorach
https://di.ics.upjs.sk/palmaj/zadania/2012_2013/1/riesenia_komentare/uloha3.htm
https://thegalleria.eu/dragon-curve-using-python-3-steps.html
http://input.sk/python2016/11.html http://input.sk/python2016/index.html
http://www.superbelfrzy.edu.pl/linux-i-wioo/minecraft-z-pythonem-w-tle/
Zadania z Logo:
http://zkomputerem.pl/face/HTML/logo/Zadania_w_Logo.htm
http://szkolnerysunki.blogspot.com/2008/11/logo-imagine.html
Rekurencja
Silnia
def silnia(n): if n <=1: return 1 else: return n * silnia(n-1) for x in range(10): print(x, silnia(x))
import turtle def rekurencja(n, bok): if n <= 0: turtle.forward(bok) else: turtle.color('red') rekurencja(n-1, bok/3) turtle.left(90) turtle.color('blue') rekurencja(n-1, bok/3) turtle.right(90) turtle.color('green') rekurencja(n-1, bok/3) turtle.right(90) turtle.color('blue') rekurencja(n-1, bok/3) turtle.left(90) turtle.color('red') rekurencja(n-1, bok/3) turtle.tracer(False) turtle.pensize(5) poziom = 2 ilosc = 5 kat = 360/ilosc for _ in range(ilosc): rekurencja(poziom, 100) turtle.right(kat) turtle.update() turtle.done()
import turtle turtle.color('red') turtle.begin_fill() for _ in range(2): turtle.forward(80) # turtle.left(90) turtle.circle(20, 90) turtle.forward(50) # turtle.left(90) turtle.circle(20, 90) turtle.end_fill() turtle.color('black') size = 25 turtle.penup() turtle.forward( (80//2)-(size * 0.7)) turtle.left(90) turtle.forward( (45)-size ) turtle.pendown() turtle.color('white') turtle.begin_fill() for _ in range(3): turtle.forward(size*2) turtle.right(120) turtle.end_fill() turtle.color('black') turtle.mainloop()
Stackoverflow: https://stackoverflow.com/questions/52005422/rounded-edge-rectangles-with-python-turtle
Serce
import matplotlib.pyplot as plt import numpy as np t = np.arange(0,2*np.pi, 0.1) x = 16*np.sin(t)**3 y = 13*np.cos(t) - 5*np.cos(2*t) - 2*np.cos(3*t) - np.cos(4*t) plt.plot(x,y) plt.show()
https://www.quora.com/How-can-I-draw-a-heart-using-Python/answer/Jamie-Morton
https://qph.fs.quoracdn.net/main-qimg-4c9586028914f9234b6e1d5851bc9979
---
https://www.quora.com/How-can-I-draw-a-heart-using-Python/answers/9685740
from turtle import * def curvemove(): for i in range(200): right(1) forward(1) color('red','pink') begin_fill() left(140) forward(111.65) curvemove() left(120) curvemove() forward(111.65) end_fill() done()
https://qph.fs.quoracdn.net/main-qimg-c5d9b01eb2e477801d7b1e5235626a07
---
https://www.quora.com/How-can-I-draw-a-heart-using-Python/answer/Nur-Zhakibaev
n = turtle.Turtle() n.left(45) n.forward(90) n.circle(45, 180) n.right(90) n.circle(45, 180) n.forward(90)
po poprawie czytelności
import turtle turtle.left(45) turtle.forward(90) turtle.circle(45, 180) turtle.right(90) turtle.circle(45, 180) turtle.forward(90) turtle.mainloop()
Z kolorami
import turtle turtle.left(90) turtle.pensize(5) turtle.color('red') turtle.circle(-60, 60) turtle.color('black') turtle.forward(35) turtle.color('red') turtle.circle(60, 60) turtle.color('green') turtle.circle(45, 180) turtle.right(180) turtle.color('blue') turtle.circle(45, 180) turtle.color('red') turtle.circle(60, 60) turtle.color('black') turtle.forward(35) turtle.color('red') turtle.circle(-60, 60) turtle.mainloop()
Bez kolorów
import turtle turtle.left(90) turtle.circle(-60, 60) turtle.forward(35) turtle.circle(60, 60) turtle.circle(45, 180) turtle.right(180) turtle.circle(45, 180) turtle.circle(60, 60) turtle.forward(35) turtle.circle(-60, 60) turtle.mainloop()
Rekurencja
import turtle def rekurencja(n, bok): if n <= 0: turtle.forward(bok) else: turtle.color('red') rekurencja(n-1, bok/3) turtle.left(90) turtle.color('blue') rekurencja(n-1, bok/3) turtle.right(90) turtle.color('green') rekurencja(n-1, bok/3) turtle.right(90) turtle.color('blue') rekurencja(n-1, bok/3) turtle.left(90) turtle.color('red') rekurencja(n-1, bok/3) turtle.tracer(False) turtle.pensize(5) poziom = 2 ilosc = 5 kat = 360/ilosc for _ in range(ilosc): rekurencja(poziom, 100) turtle.right(kat) turtle.update() turtle.done()
Owal i elipsa
Tree / Drzewa
Spirala - Muszla
import turtle turtle.tracer(False) krok = 10 for bok in range(0, 361, krok): turtle.forward(bok) turtle.backward(bok) turtle.left(krok) turtle.update() turtle.mainloop()
Podobne wpisy
Starsze:
- Rysowanie kwiatka z użyciem żółwika w Pythonie
- Rysowanie kolorowego okręgu z Turtle
- Rysowanie planu mieszkania za pomocą Turtle w Pythonie
Nowsze:
Wpisy jeszcze nie gotowe:
Galeria
Figury
- Rysowanie z Turtle - Okrąg, Łuk, Koło i Elipsa
- Rysowanie z Turtle - Romb, Trapez i Gwiazda
- Rysowanie z Turtle - Wielobok
- Rysowanie z Turtle - Schodki
- Rysowanie z Turtle - Kwadrat, okrąg i inne figury
- Rysowanie z Turtle - Inne
Tkinter
- Rysowanie z Turtle - Wprowadzanie danych z textinput i numinput
- Rysowanie z Turtle - Płótno czyli Canvas i inne obiekty z Tkinter
- Rysowanie z Turtle - Wait On Click
Internet
Inne
Spis - powyższe linki na osobnej stronie
Buy a Coffee