#coding= utf- 8
import turtle
import math def draw_polygon ( aTurtle, size= 50 , n= 3 ) : ''' 绘制正多边形args: aTurtle: turtle对象实例size: int 类型,正多边形的边长n: int 类型,是几边形 '''for i in range ( n) : aTurtle. forward ( size) aTurtle. left ( 360.0 / n) def draw_n_angle ( aTurtle, size= 50 , num= 5 , color= None ) : ''' 绘制正n角形,默认为黄色args: aTurtle: turtle对象实例size: int 类型,正多角形的边长n: int 类型,是几角形 color: str, 图形颜色,默认不填色'''if color: aTurtle. begin_fill ( ) aTurtle. fillcolor ( color) for i in range ( num) : aTurtle. forward ( size) aTurtle. left ( 360.0 / num) aTurtle. forward ( size) aTurtle. right ( 2 * 360.0 / num) if color: aTurtle. end_fill ( ) def draw_5_angle ( aTurtle= None , start_pos= ( 0 , 0 ) , end_pos= ( 0 , 10 ) , radius= 100 , color= None ) : ''' 根据起始位置、结束位置和外接圆半径画五角星args: aTurtle: turtle对象实例start_pos: int 的二元tuple,要画的五角星的外接圆圆心end_pos: int 的二元tuple,圆心指向的位置坐标点radius: 五角星外接圆半径color: str, 图形颜色,默认不填色 '''aTurtle = aTurtle or turtle. Turtle( ) size = radius * math. sin ( math. pi/ 5 ) / math. sin ( math. pi* 2 / 5 ) aTurtle. left ( math. degrees ( math. atan2 ( end_pos[ 1 ] - start_pos[ 1 ] , end_pos[ 0 ] - start_pos[ 0 ] ) ) ) aTurtle. penup ( ) aTurtle. goto ( start_pos) aTurtle. fd ( radius) aTurtle. pendown ( ) aTurtle. right ( math. degrees ( math. pi* 9 / 10 ) ) draw_n_angle ( aTurtle, size, 5 , color) def draw_5_star_flag ( times= 20.0 ) : ''' 绘制五星红旗args: times: 五星红旗的规格为30 * 20 , times为倍数,默认大小为10 倍, 即300 * 200 '''width, height = 30 * times, 20 * times# 初始化屏幕和海龟window = turtle. Screen( ) aTurtle = turtle. Turtle( ) aTurtle. hideturtle ( ) aTurtle. speed ( 10 ) # 画红旗aTurtle. penup ( ) aTurtle. goto ( - width/ 2 , height/ 2 ) aTurtle. pendown ( ) aTurtle. begin_fill ( ) aTurtle. fillcolor ( 'red' ) aTurtle. fd ( width) aTurtle. right ( 90 ) aTurtle. fd ( height) aTurtle. right ( 90 ) aTurtle. fd ( width) aTurtle. right ( 90 ) aTurtle. fd ( height) aTurtle. right ( 90 ) aTurtle. end_fill ( ) # 画大星星draw_5_angle ( aTurtle, start_pos= ( - 10 * times, 5 * times) , end_pos= ( - 10 * times, 8 * times) , radius= 3 * times, color= 'yellow' ) # 画四个小星星stars_start_pos = [ ( - 5 , 8 ) , ( - 3 , 6 ) , ( - 3 , 3 ) , ( - 5 , 1 ) ] for pos in stars_start_pos: draw_5_angle ( aTurtle, start_pos= ( pos[ 0 ] * times, pos[ 1 ] * times) , end_pos= ( - 10 * times, 5 * times) , radius= 1 * times, color= 'yellow' ) # 点击关闭窗口window. exitonclick ( ) if __name__ == '__main__': draw_5_star_flag ( )