python_turtle 学习笔记(多边形、圆弧)

文章目录

  • Turtle
    • 新建turtle对象
    • 画正方形
    • 画圆形
    • 画多边形
    • 画圆弧-1
    • 画圆弧-2
    • 完整代码

Turtle

龟图形是一种向孩子介绍编程的流行方式。它是Wally Feurzeig,Seymour Papert和Cynthia Solomon在1967年开发的原始徽标编程语言的一部分。

官方文档:https://docs.python.org/3/library/turtle.html

在线调试网址: https://repl.it/languages/python_turtle

新建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)

画圆弧-1

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循环的执行次数。

画圆弧-2

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)

你可能感兴趣的:(python,笔记)