Python 代码理解 polygon.py
1、运行和阅读代码
该代码的主要功能为通过调用不同的包,设置不同的线段数、线段长度和角度等条件,进行不同图形的绘制。
经过环境配置和代码阅读后,初步运行代码如下图所示:
2、理解代码功能
具体功能理解将在代码中以注释形式体现:
import math
try:
#查看Swampy是否以包的形式安装
from swampy.TurtleWorld import *
except ImportError:
#否则查看模块是否在PYTHONPATH中
from TurtleWorld import *
def square(t, length):
#绘制具有给定边长的四边形
#length: 边长
for i in range(4):
fd(t, length) #forward:向前走指定长度length
lt(t) #left_turn:向左转指定角度(此处指定角度缺省,因为在函数定义时已初设为90°)
def polyline(t, n, length, angle):
#绘制具有给定边数和边长的正多边形(具体执行函数)
#t: Turtle对象
#n: 边数
#length: 边长
#angle: 两边夹角
for i in range(n):
fd(t, length) #forward:向前走指定长度length
lt(t, angle) #left_turn:向左转指定角度angle
def polygon(t, n, length):
#绘制具有给定边数和边长的正多边形(入口函数)
#t: Turtle对象
#n: 边数
#length: 边长
#angle: 两边夹角
angle = 360.0/n
polyline(t, n, length, angle) #绘制操作在polyline()函数中具体执行
def arc(t, r, angle):
#绘制具有给定半径和角度的圆弧
#t: Turtle对象
#r: 半径
#angle: 弧度角,以度表示
arc_length = 2 * math.pi * r * abs(angle) / 360
n = int(arc_length / 4) + 1
step_length = arc_length / n
step_angle = float(angle) / n
#在开始前稍作左转可以减少弧的线性近似所引起的误差
lt(t, step_angle/2)
polyline(t, n, step_length, step_angle)
rt(t, step_angle/2)
def circle(t, r):
#绘制给定半径的圆
#t: Turtle对象
#r: 半径
arc(t, r, 360)
if __name__ == '__main__':
world = TurtleWorld() #建立一个TurtleWorld对象,赋值给world
bob = Turtle() #建立一个Turtle对象,赋值给bob
bob.delay = 0.001
#绘制圆心在原点的圆
radius = 100 #圆的半径为100
pu(bob) #将对象的pen属性设为False(即仅移动不绘制)
fd(bob, radius) #先让笔尖从原点向右偏离半径radius的距离,作为绘制起点
lt(bob) #向左转,朝向圆的切线方向
pd(bob) #将对象的pen属性设为True
circle(bob, radius) #开始绘制
#告诉TurtleWorld等待用户进行某些操作(本例中为“关闭窗口”)
wait_for_user()
3、修改代码,练习调用文件中其他几个图形函数
下文只列出关键代码段落和运行结果。
3.1绘制四边形
if __name__ == '__main__':
world = TurtleWorld()
bob = Turtle()
bob.delay = 0.001
length = 100 #设置四边形边长为100
pd(bob)
square(bob, length)
wait_for_user()
3.2绘制一个边数为6的正多边形
if __name__ == '__main__':
world = TurtleWorld()
bob = Turtle()
bob.delay = 0.001
n = 6 #设置边数为6
length = 100 #设置边长为100
pd(bob)
polygon(bob, n , length)
wait_for_user()
3.3绘制一个弧度角为90°的圆弧
if __name__ == '__main__':
world = TurtleWorld()
bob = Turtle()
bob.delay = 0.001
r = 100 #设置半径为100
angle = 90 #设置弧度角为90°
pd(bob)
arc(bob, r, angle)
wait_for_user()
3.4绘制一个小蓝人的头
if __name__ == '__main__':
world = TurtleWorld()
bob = Turtle()
bob.delay = 0.001
#以下为调参和绘制过程
radius = 200
pu(bob)
fd(bob, radius)
lt(bob)
pd(bob)
circle(bob, radius)
pu(bob)
lt(bob)
fd(bob, 140)
rt(bob)
fd(bob, 40)
pd(bob)
circle(bob, 8)
pu(bob)
lt(bob)
fd(bob, 104)
rt(bob)
pd(bob)
circle(bob, 8)
pu(bob)
rt(bob)
rt(bob)
fd(bob, 50)
pd(bob)
arc(bob, 44, 180)
lt(bob)
fd(bob, 88)
wait_for_user()