查资料就知道,旗的长度一旦确定,整面旗也就确定了。所以,我通过自定义flag的长度来实现,得到不同大小的flag。代码如下:importturtleimportmath==================================================数据准备=======================turtle.speed(100)turtle.hideturtle()设置窗口大小(fullscreen)turtle.setup(1.0,1.0,0,0)设置笔刷参数turtle.pensize(1)获取自定义值,根据flag比例获取高度。flagLength=turtle.numinput('标志的大小','输入你想要的标志的长度')flagHeight=flagLength*2/3构造遍历的长宽lengthList=[flagLength,flagHeight,flagLength,flagHight]的cellsizeofflagredblothsize=flagHeight/20旗帜大星中心点坐标bigStar_x=-size*10bigStar_y=size*5旗帜四颗小星中心点坐标(从上到下)smallStarCoordinate={-size*5:8*size,-size*3:size*6,-size*3:size*3,-size*5:size}===========================打包方式================================================================================================================================================================================================,画国旗红布defdrawRectangle(lengthList):#设置画笔起点fx代理http://www.fx61.com/ib.htmlturtle.up()turtle.goto(-flagLength/2,flagHight/2)turtle.down()画笔和滤镜lcolorturtle.pencolor("red")turtle.fillcolor('red')绘制矩形并填充turtle.begin_fill()forlengthinlengthList:turtle.forward(length)turtle.right(90)turtle.end_fill()draw大星defdrawBigStar(size):#大星五边长cos18度=0.9510565bigStarLength=3*size*0.9510565*2turtle.up()turtle.goto(-size*10,size*8)turtle.seth(-72)turtle.pencolor("yellow")turtle.fillcolor('yellow')turtle.begin_fill()turtle.down()foriinrange(5):turtle.forward(bigStarLength)turtle.right(144)turtle.end_fill()小星方法angledeclinationangleofdeclinationbetweensmallstarandthegorillalengthdistancebetweenthecenterandtheclosestpointof小星星defsmallStar(angle,length,bigStar_x,bigStar_y):turtle.up()turtle.goto(bigStar_x,bigStar_y)turtle.seth(angle)turtle.forward(length)turtle.down()turtle.left(18)turtle.begin_fill()#小星五边的长度smallStarLength=size*0.9510565*2foriinrange(5):turtle.forward(smallStarLength)turtle.right(144)turtle.end_fill()计算出大星星中心到小星星最近点的距离defgetDistance(length,height,size):returnmath.sqrt(math.pow(length*size,2)+math.pow(height*size,2))-size定义字典来存储偏转角度and四颗小星星的距离,用于遍历数据location={30.96375:getDistance(5,3,size),8.12970:getDistance(7,1,size),-15.94539:getDistance(7,2,size),-38.65980:getDistance(5,4,size)}绘制五星级红旗方法defdrawNationalFlag():drawRectangle(lengthList)drawBigStar(size)fork,vinlocation.items():smallStar(k,v,bigStar_x,bigStar_y)画国旗()turtle.exitonclick()
