Python Turtle海龟画图-画星条旗1-画辅助线

陪孩子画完了咱们中国国旗(五星红旗)之后,想再画一下美利坚合众国的国旗(星条旗)。

首先了解一下星条旗的比例数据:

也就是说,美国国旗更长一些,也不是黄金分隔,咱们的是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()

效果如下:

今天就先到这儿吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值