龟图形是一种向孩子介绍编程的流行方式。它是Wally Feurzeig,Seymour Papert和Cynthia Solomon在1967年开发的原始徽标编程语言的一部分。
官方文档:https://docs.python.org/3/library/turtle.html
在线调试网址: https://repl.it/languages/python_turtle
import turtle
import math
bob = turtle.Turtle()
ps:math是为了便于后续进行的计算的操作
def rectangle(t,length):
for i in range(4):
t.fd(length)
t.lt(90)
fd->forward->向前移动
lt->left turn->左转
def circle(t,r):
n_of_edge=70
circle_length = 2*math.pi*r
angle = 360.0/n_of_edge
length_of_edge = circle_length/n_of_edge
for _ in range(int(n_of_edge)):
t.fd(length_of_edge)
t.lt(angle)
fd->forward->向前移动
lt->left turn->左转
此时的圆形只是近似生成。
我们知道如果一个有方向的箭头,围绕着圆形的切线方向走一圈,会回到原始的朝向,任意给定一个零度的参考,他将回到最开始的角度。
也就是说他在整个圆上走一圈,转了360度。
我们画一个圆形其实是一种近似的思想。边越多越接近一个圆形。假设每个圆形上有70条边,那么每次转动的角度就是 360 70 \frac{360}{70} 70360 .
又因为圆形的半径(radious)为 r r r, 那么周长就是 2 × π × r 2\times \pi \times r 2×π×r 。
每次调用fd向当前方向前进的距离,也就是每条边的长度为: 2 × π × r 70 \frac{2\times \pi \times r}{70} 702×π×r.
def polygon(t_obj,n_edge,l_edge):
angle = 360.0/n_edge
for _ in range(n_edge):
t_obj.fd(l_edge)
t_obj.lt(angle)
def arc(t,r):
n_of_edge=700
circle_length = 2*math.pi*r
angle = 360.0/n_of_edge
length_of_edge = circle_length/n_of_edge
for _ in range(int(n_of_edge)/2):
t.fd(length_of_edge)
t.lt(angle)
fd->forward->向前移动
lt->left turn->左转
画圆弧只需要控制前进,旋转组合的执行次数即可。
即控制for循环的执行次数。
def arc(t_obj,r,angle):
arc_length = 2*math.pi*r*(angle/366.0)
n = int(arc_length/3)+1
length_each_step = arc_length/n
angle_each_step = float(angle)/n
for _ in range(n):
t_obj.fd(length_each_step)
t_obj.lt(angle_each_step)
import turtle
import math
bob = turtle.Turtle()
def rectangle(t,length):
for i in range(4):
t.fd(length)
t.lt(90)
def circle(t,r):
n_of_edge=70
circle_length = 2*math.pi*r
angle = 360.0/n_of_edge
length_of_edge = circle_length/n_of_edge
for _ in range(int(n_of_edge)):
t.fd(length_of_edge)
t.lt(angle)
def arc(t,r):
n_of_edge=700
circle_length = 2*math.pi*r
angle = 360.0/n_of_edge
length_of_edge = circle_length/n_of_edge
for _ in range(int(n_of_edge)/2):
t.fd(length_of_edge)
t.lt(angle)
def polygon(t_obj,n_edge,l_edge):
angle = 360.0/n_edge
for _ in range(n_edge):
t_obj.fd(l_edge)
t_obj.lt(angle)
#interface design
def circle_with_embedded_polygon(t_obj,r):
n = 50
circle_length = 2*math.pi*r
edge_length = circle_length/n
polygon(t_obj,50,edge_length)
def perfect_circle(t_obj,r):
circle_length = 2*math.pi*r#circumference
n = int(circle_length/3)+1
length_of_edge = circle_length/n
polygon(t_obj,n,length_of_edge)
def arc(t_obj,r,angle):
arc_length = 2*math.pi*r*(angle/366.0)
n = int(arc_length/3)+1
length_each_step = arc_length/n
angle_each_step = float(angle)/n
for _ in range(n):
t_obj.fd(length_each_step)
t_obj.lt(angle_each_step)
# circle(bob,70)
# polygon(bob,600,2)
# rectangle(bob,60)0po
# circle_with_embedded_polygon(bob,200)
# perfect_circle(bob,80)
arc(bob,100,180)