陪孩子画完了咱们中国国旗(五星红旗)之后,想再画一下美利坚合众国的国旗(星条旗)。
首先了解一下星条旗的比例数据:

也就是说,美国国旗更长一些,也不是黄金分隔,咱们的是3:2,他们的是1.9:1.0,考虑到高度上还得分成13份,13个条带代表美国立国时的13个州。
那么考虑凑个整数247:130,再考虑到得居中,左右各一半,那么咱们试着画个494:260的。
这样左上角的坐标是(-247,130),宽494,高260。
那么先画个国旗的框框:
#star_spangled_banner.py
import turtle
class StarSpangledBannerFlag:
_unit=1
def __init__(self, unit):
self._unit=unit
# Set Speed to fast
turtle.speed(0)
# Set color mode to 255 for RGB values between 0-255
turtle.colormode(255)
def draw_rectangle(self,x=0,y=0,width=0.0,height=0.0,color=(255,0,0),fill_color=(255,0,0)):
turtle.color(color)
turtle.goto(x * self._unit, y * self._unit)
turtle.fillcolor(fill_color)
turtle.begin_fill()
for _ in range(4):
turtle.forward(width * self._unit if _%2==0 else height * self._unit)
turtle.right(90)
turtle.end_fill()
def draw_flag(self):
self.draw_rectangle(-247,130,494,260,"black","white")
def draw_usa_flag(self):
self.draw_flag()
turtle.hideturtle()
turtle.done()
if __name__ == "__main__":
usaFlag=StarSpangledBannerFlag(2)
usaFlag.draw_usa_flag()
然后再来画13个条带,其实画7个红条带就可以了,剩下6个条带就让它自己留白好了,不过这个颜色不能太红,不然看着难受,太耀眼了,美国国旗里用到的红色和蓝色叫做荣耀红和荣耀蓝,咱们可以上网查到255色号。
US_SPANGLED_RED=(191,26,35)
US_SPANGLED_BLUE=(60,59,110)
画7个条带:
def draw_stripes(self):
for y in range(130,-130, -40):
self.draw_rectangle(-247,y,494,20,self.US_SPANGLED_RED,self.US_SPANGLED_RED)
然后咱们画左上角的那蓝色的星区,星区的宽度是国旗总宽度的2/5,也就是494*2/5=197.6
高度是7个条带的长度,也就是国旗总高度的7/13,即260/13*7=140。
def draw_star_area(self):
self.draw_rectangle(-247,130,197.6,140,self.US_SPANGLED_BLUE,self.US_SPANGLED_BLUE)
然后咱们在蓝色星区里画辅助线,画10条横线和12条竖线。
def draw_line(self,x=0.0,y=0.0,heading=0,distance=10.0):
turtle.penup()
turtle.goto(x*self._unit, y*self._unit)
turtle.pendown()
turtle.setheading(heading)
turtle.forward(distance*self._unit)
def draw_lines(self):
turtle.color("yellow")
#画9条横线
for y in range(116,-10,-14):
self.draw_line(-247,y,0,197.6)
# 画11条竖线
for x in range(-23053, -4940, 1647):
self.draw_line(x/100, 130, 270, 140)
最终总代码如下:
import turtle
class StarSpangledBannerFlag:
_unit=1
US_SPANGLED_RED=(191,26,35)
US_SPANGLED_BLUE=(60,59,110)
STAR_SIDE_LEN_RATIO = 0.7265425280053608
def __init__(self, unit):
self._unit=unit
# Set Speed to fast
turtle.speed(0)
# Set color mode to 255 for RGB values between 0-255
turtle.colormode(255)
def draw_rectangle(self,x=0,y=0,width=0.0,height=0.0,color=(255,0,0),fill_color=(255,0,0)):
turtle.color(color,fill_color)
turtle.penup()
turtle.goto(x * self._unit, y * self._unit)
turtle.pendown()
turtle.begin_fill()
for _ in range(4):
turtle.forward(width * self._unit if _%2==0 else height * self._unit)
turtle.right(90)
turtle.end_fill()
turtle.penup()
def draw_stripes(self):
for y in range(130,-130, -40):
self.draw_rectangle(-247,y,494,20,self.US_SPANGLED_RED,self.US_SPANGLED_RED)
def draw_star_area(self):
self.draw_rectangle(-247,130,197.6,140,self.US_SPANGLED_BLUE,self.US_SPANGLED_BLUE)
def draw_stars(self):
for j in range(1,10):
y=130 - 14*j
for i in range(1,12):
x=-247 + 16.466666667*i
if i%2==j%2:
turtle.goto(x*self._unit, y*self._unit)
self.draw_star(x, y, 19.76/2, 90, "white")
def draw_star(self,x=0.0,y=0.0,radius=1.0,angle=90,color="white"):
"""
绘制五角星
"""
turtle.goto(x*self._unit, y*self._unit)
turtle.setheading(angle)
turtle.forward(radius * self._unit)
turtle.right(90+72)
turtle.color(color,color)
side_length = self.STAR_SIDE_LEN_RATIO * radius * self._unit
turtle.pendown()
turtle.begin_fill()
for i in range(10):
turtle.forward(side_length)
turtle.left(72 if i%2==0 else 360-144)
turtle.end_fill()
turtle.penup()
def draw_usa_flag(self):
turtle.title("Star Spangled Banner Flag")
self.draw_stripes()
self.draw_star_area()
self.draw_stars()
turtle.hideturtle()
turtle.done()
if __name__ == "__main__":
usaFlag=StarSpangledBannerFlag(2)
usaFlag.draw_usa_flag()
效果如下:

今天就先到这儿吧。
1万+

被折叠的 条评论
为什么被折叠?



