数学:180 角度 = math.pi
例如:画正3边形
draw_n.py 3 100
例如:画正8边形
执行 draw_n.py 8 100
# -*- coding: cp936 -*-
import os, sys
import turtle
import math
vlist =[]
def p_line(t, n, length, angle):
"""Draws n line segments."""
for i in range(n):
t.fd(length)
vlist.append(t.pos())
t.left(angle)
def polygon(t, n, length):
"""Draws a polygon with n sides."""
angle = 360.0/n
p_line(t, n, length, angle)
def draw(tt, n, L):
X,Y = tt.pos() # start_pos
polygon(tt, n, L)
R = L/2/math.sin(math.pi/n) # 半径
r = R*math.cos(math.pi/n) # 边心距
# 求中心点坐标(x,y)
x = L/2 +X
y = r + Y
tt.goto(X,Y) # start_pos
for pos in vlist:
tt.goto(x,y)
tt.pendown()
tt.goto(pos)
tt.penup()
print x,y
# 画内切圆
tt.goto(x,0)
tt.pendown()
tt.circle(y,360)
tt.penup()
# 画外接圆
tt.goto(x,y-R)
tt.pendown()
tt.circle(R,360)
tt.penup()
# main
if len(sys.argv) ==3:
n = int(sys.argv[1]) # n 边形
L = float(sys.argv[2]) # 边长
else:
print 'usage: draw_n.py int Length'
sys.exit(4)
if n < 3:
print 'Error: n < 3 '
sys.exit(4)
if n > 36:
print 'Error: n > 36 '
sys.exit(4)
window= turtle.Screen() #creat a screen
window.bgcolor("white")
tt = turtle.Turtle()
tt.color("black")
tt.width(1)
tt.speed(10)
draw(tt,n,L)
window.exitonclick()