turtleを使用して疫病給油図案を描く

34756 ワード

turtleというライブラリは、子供たちにプログラミングの知識を紹介するために最もよく使われる方法ライブラリとして紹介されています.それは主にプログラム設計の入門に用いられ、標準ライブラリの一つです.公式ドキュメントは以下の通りです.turtleを利用して多くの複雑な絵を作ることができます.本文は疫病の間、武漢を応援する図案を簡単に描きます.
ライブラリファイルのインポート
import turtle
import math
import time

えんけいを描く
サイクル回転微小角度により円弧を形成する.
def hart_arc():
    '''     '''
    for i in range(200):
        turtle.right(1)
        turtle.forward(3)

移動ブラシを関数にカプセル化
def move_pen_position(x,y):
    '''      '''
    turtle.hideturtle() #    
    turtle.up() #  
    turtle.goto(x,y) #           (     0,0)
    turtle.down() #  
    turtle.showturtle() #    

愛の主体部分を描く
def draw_main():
    '''            '''
    #    
    turtle.setup(width=1200, height=750)  #     
    turtle.color('pink', 'pink')  #     
    turtle.pensize(5)  #     
    turtle.speed(1)  #     

    #          
    move_pen_position(x=0, y=-270)  #       
    turtle.left(140)  #     140 
    turtle.begin_fill()  #         
    #      (     )
    turtle.forward(336)  #       ,   224

    #      
    turtle.speed(0)  #         ,      
    hart_arc()  #     
    turtle.left(120)  #       
    hart_arc()  #     

    #      (     )
    turtle.speed(1)  #     
    turtle.forward(336)
    time.sleep(0.8)
    turtle.end_fill()  #           
    #           
    move_pen_position(0, 0)  #      
    turtle.hideturtle()  #     
    turtle.color('#CD5C5C', 'black')  #     
    time.sleep(0.5)
    # font:    、  (            ) align:    
    turtle.write(love, font=('times new roman', 30, 'bold'), align="center")

正のn角形の描画を関数にカプセル化
def draw_n_angle(turtle, size=50, num=5, color=None):
    '''    n  
    args:
        turtle: turtle    
        size: int  ,       
        n: int  ,    
        color: str,     ,     
    '''
    if color:
        turtle.begin_fill()
        turtle.fillcolor(color)
    for i in range(num):
        turtle.forward(size)
        turtle.left(360.0 / num)
        turtle.forward(size)
        turtle.right(2 * 360.0 / num)
    if color:
        turtle.end_fill()

国旗に描かれた五角星を関数にカプセル化
国旗上の五角星の位置が変化するため、外接円に基づいて五角星の位置を決定することができる.
def draw_5_angle(turtle=None, start_pos=(0, 0), end_pos=(0, 10), radius=120, color=None):
    '''       、              
    args:
        turtle: turtle    
        start_pos: int   tuple,            
        end_pos: int   tuple,          
        radius:         
        color: str,     ,     
    '''
    turtle = turtle or turtle.Turtle()
    size = radius * math.sin(math.pi / 5) / math.sin(math.pi * 3 / 10)
    angle = math.degrees(math.atan2(end_pos[1] - start_pos[1], end_pos[0] - start_pos[0]))
    print(angle)
    turtle.penup()
    turtle.goto(start_pos)
    turtle.setheading(0)
    turtle.left(angle)
    turtle.fd(radius)
    turtle.pendown()
    turtle.right(math.degrees(math.pi * 9 / 10))
    draw_n_angle(turtle, size, 5, color)

国旗をかく
国旗と愛の相対的な大きさと位置はパラメータlarge,large 1を調整することができる.
def draw_flag():
    large1 = 1.18  #        
    large = 1  #             
    #       ,     30*20
    width, height = 300*large1, 200*large1
    #         
    # window = turtle.Screen()
    # turtle = turtle.Turtle()
    #turtle.reset()#              
    turtle.pensize(1)
    turtle.color("red")
    degree = 0
    turtle.setheading(degree)#    ,degree    
    turtle.hideturtle()
    turtle.speed(10)
    #    
    turtle.penup()
    turtle.goto(-300*large1 / 2, 200*large1 / 2) #        
    turtle.pendown()
    turtle.begin_fill()
    turtle.fillcolor('red')
    turtle.fd(width)
    turtle.right(90)
    turtle.fd(height)
    turtle.right(90)
    turtle.fd(width)
    turtle.right(90)
    turtle.fd(height)
    turtle.right(90)
    turtle.end_fill()
    #     
    draw_5_angle(turtle, start_pos=(-100*large, 50*large), end_pos=(-100*large, 80*large), radius=30, color='yellow')
    #       
    stars_start_pos = [(-5*large, 8*large), (-3*large, 6*large), (-3*large, 3*large), (-5*large, 1*large)]
    for pos in stars_start_pos:
        draw_5_angle(turtle, start_pos=(pos[0] * 10*large, pos[1] * 10*large), end_pos=(-10 * 10*large*large, 5 * 10*large*large), radius=10,
                     color='yellow')

文末署に自署する
位置の調整に注意する.
def draw_signature():
    '''    '''
    if signature != '':
        turtle.color('red', 'blue')
        time.sleep(0.2)
        move_pen_position(270, -270)
        turtle.hideturtle()  #     
        turtle.write(signature, font=('Microsoft YaHei', 20), align="center")

応援メッセージを印刷
def draw_word(words,positionx=500,alignstyle="right"):
    '''      '''
    turtle.color('red', 'blue')
    time.sleep(0.2)
    move_pen_position(positionx, 0)
    turtle.hideturtle()  #     
    turtle.write(words, font=('KaiTi', 90), align=alignstyle)

よびだし
if __name__ == "__main__":
    love = "
, "
# signature = "----- " # draw_main() # time.sleep(2) draw_flag() # time.sleep(0.5) draw_word(" ",-500,"left") # draw_word(" ") time.sleep(0.5) draw_signature() # time.sleep(1) turtle.reset() turtle.exitonclick() #

Pythonのif name=“main”:の役割と原理について、以下に分かりやすいブログを推薦して参考にします:if name=“main”
以下に完全なコードを添付して参考にします.gitにはすでに描かれたgif図があります.gitリンク