如何用Python turtle画“中药:人参”

Python turtle库画笔画找不到对的角度和长度,字画出来的笔画都是散架的还有些笔画写不出来

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7574358
  • 这篇博客你也可以参考下:手把手教你学Python之绘图库Turtle(一文掌握Python中Turtle库的使用)
  • 同时,你还可以查看手册:python-turtle --- 海龟绘图 中的内容
  • 除此之外, 这篇博客: Python的turtle库画五星红旗的新思路中的 在学python的turtle库后,想到了一个画五角星的新思路。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • *至少我还没在网上看见过。下面让我来给大家介绍介绍吧。
    思路比较简单,使turtle自己画圆形,连续两圈,在这两圈中每过144°标记以下turtle所处的位置(调用pos方法),并将位置信息保存起来。最后用goto语句直接进行连接即可。下面看下实践操作:

    import turtle
    turtle.pensize(1)
    turtle.up()
    li=[]
    # 画圆形,标记位置
    for i in range(5):
        turtle.circle(-40,144)
        turtle.pencolor("red")
        turtle.down()
        turtle.dot()
        li.append(turtle.pos())
    
    # 画五角星
    turtle.goto(li[4])
    for i in range(5):
        turtle.goto(li[i])
    

    效果图:
    在这里插入图片描述
    将画圆形和点的部分进行抬笔操作后,再进行填充,便可以得到五角星了。

    import turtle
    turtle.pensize(1)
    turtle.up()
    li=[]
    # 画圆形,标记位置
    for i in range(5):
        turtle.circle(-40,144)
        turtle.pencolor("red")
    
        # turtle.dot()
        li.append(turtle.pos())
    
    # 画五角星
    turtle.fillcolor("red")
    turtle.begin_fill()
    turtle.down()
    turtle.goto(li[4])
    for i in range(5):
        turtle.goto(li[i])
    turtle.end_fill()
    

    最终效果如下:
    在这里插入图片描述

    看到这里,应该都明白了吧。至于为什么这样画,主要是下面介绍稍大点的项目——画五星红旗,用我的这种方法思路比较清晰。效果图如下:
    在这里插入图片描述

    import turtle
    import math
    turtle.pencolor("red")
    turtle.fillcolor("red")
    turtle.pensize(1)
    
    #画矩形,选择的66*44比例的旗帜
    turtle.begin_fill()
    turtle.up()
    turtle.goto(-330,-220)
    turtle.down()
    for i in range(2): 
        turtle.fd(660)
        turtle.left(90)
        turtle.fd(440)
        turtle.left(90)
    #此时海龟坐标为-330,-220
    turtle.end_fill()
    #分割二象限,用于调试计算,提交时注释掉
    '''turtle.up()
    turtle.goto(-330,0)
    turtle.down()
    turtle.fd(660)
    
    turtle.speed(0)
    turtle.up()
    turtle.goto(0,220)
    turtle.down()
    turtle.seth(-90)
    turtle.fd(440)
    
    for i in range(10):   
        turtle.up()
        turtle.goto(-330,22*i)
        turtle.seth(0)
        turtle.down()
        turtle.fd(330)
    
    
    for i in range(15):   
        turtle.up()
        turtle.goto(-22*i,220)
        turtle.seth(-90)
        turtle.down()
        turtle.fd(220)
    
    turtle.up()
    turtle.goto(-220,44)# 大五角星的中心的正下方
    turtle.down()
    turtle.seth(0)
    turtle.circle(66)
    '''
    #画五角星
    def draw_star(x,y,a,b,rank,radis):
        turtle.fillcolor("yellow")#填充颜色
        turtle.pencolor("yellow") #画笔颜色
        turtle.up()
        pos_list=[] #存储五个点的坐标的二维列表
        turtle.goto(x,y)
        turtle.seth(0)
        if rank>0:      
            if(rank<3):#判断是上面两个星星还是下面两个星星,因为转的角度不同
                rank=2
            else:
                rank=3
            f=90*rank+math.degrees(math.atan(a/b))
        else:
            f=0;
        #print(f)
        turtle.circle(-radis,f)
        for i in range(5): #循环5次,标记五个点
            turtle.up()
            turtle.circle(-radis,144)
            #turtle.down()
            #turtle.dot()
            pos_list.append(turtle.pos())
        #print(small_pos_list)
        turtle.up()
        turtle.goto(pos_list[4])#回到起点
        turtle.begin_fill()
        turtle.down()
        for i in range(5): #开始画五角星
            turtle.goto(pos_list[i])
        turtle.end_fill()
    
    
    draw_star(-220,176,0,0,0,66) #画大五角星,输入起点坐标,偏置角度0,0,规定大五角星编号为0,圆形半径为66
    draw_star(-110,198,5,3,1,22) # 第一颗星星 起点在左边第5个格子,上边9个格子,偏置角度的tan=5/3,编号为1,圆形半径为22
    draw_star(-66,154,7,1,2,22)# 第二颗星星 起点在左边第3个格子,上边7个格子,偏置角度的tan=7/1,编号为2,圆形半径为22
    draw_star(-66,88,2,7,3,22)# 第三颗星星 起点在左边第3个格子,上边7个格子,偏置角度的tan=2/7,编号为3,圆形半径为22
    draw_star(-110,44,4,5,4,22) # 第四颗星星 起点在左边第5个格子,上边9个格子,偏置角度的tan=4/5,编号为4,圆形半径为22
    

    注释部分是画格子的代码,用于调试,大部分代码都有注释,所以不做过多解释了。

  • 您还可以看一下 尹国艳老师的轻松掌握 Python中的turtle绘图课程中的 使用turtle绘制魔力圆小节, 巩固相关知识点