💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# Python Turtle绘图:甜美棒棒糖(基础效果 / 加描边优化)【难度2星】 ![](http://h.yiniuedu.com/a4e250344f0912a2ee0fb6c1a40682fc) **案例:** **棒棒糖(基础效果)** **难度:★★☆☆☆☆** **【重难点突破】** 画棒棒糖的难点是画圆形糖中间的圆形螺旋线,所以建议大家不要急于复制代码直接去画整体的棒棒糖,而是要静下心来先单独研究圆形螺旋线的绘制方法。 **画圆形螺旋线的方法:** **持续增加半径画圆弧的同时,再向内旋转一定的角度来减小离心距离。** 持续增加半径需要通过循环变量来实现 **如何实现描边?** 棒棒描边方法:通过画内外两根粗线长短不一样的棒棒重叠来实现 圆形糖描边方法:通过画内外两个直径和颜色不同的圆点重叠来实现 ``` # 案例2:甜美棒棒糖(加描边优化) #(以下数字参数都是不断调试的结果。如果使用变量,再总结出适合画不同大小棒棒糖的公式,只会使得代码庞大更难理解。) # 程序初始化设置 import turtle # 导入turtle库(模块) turtle.speed(0) # 设置海龟的绘图速度为0,最快。参数为1时最慢。 turtle.bgcolor("#9a7c99") # 设置背景颜色为 #9a7cbc ,一种紫色 ### ① 画棒棒(加描边) # 描边可以通过画内外两根粗线长短不一样的棒棒重叠来实现 # 为了使海龟绘画程序简单,棒的顶端就画在圆形糖的中心位置。 # 因为棒在圆形糖下面,所以要先画棒再画糖,这样圆形糖就会遮挡住多余的棒。 # 又因为糖下面的棒棒较长,所以为了美观,需要将圆形糖的坐标中心(即棒的顶端)垂直往上移 turtle.penup()                  # 画笔抬起 ,则海龟行走时不会留下痕迹。 turtle.goto(0,100)              # 使海龟移动至坐标(0,100),即画棒将从坐标(0,100)位置开始,而不是坐标原点(0,0)。 turtle.pendown()                # 画笔落下,海龟行走时会留下痕迹。 # 棒棒向左下方倾斜。倾斜也是为了美观。 # 画外部的棒棒(粗一点) turtle.right(120) # 海龟头部默认是水平向右,该设置可以使得海龟向右旋转120度,即顺时针旋转。 turtle.pencolor("#ffc0ff")      # 设置画笔的颜色为 #93543d ,是类似巧克力的颜色。 turtle.pensize(40)              # 设置画笔的粗细为40。也就是棒棒的粗线是40。 turtle.forward(270) # 海龟向前移动270步(像素),即棒棒的长度是270像素。 # 海龟抬笔后退几步,使棒棒底部也出现描边 turtle.penup()                  # 画笔抬起,则海龟行走时不会留下痕迹。 turtle.backward(6)              # 海龟后退6步(像素),可使棒棒底部也有描边。这个粗线参数需要不断调试。 turtle.pendown()                # 画笔落下,海龟行走时才会留下痕迹。 # 画内部的棒棒(细一点) turtle.pensize(40-20) # 设置画笔的粗细为 40-20 。也就是内部棒棒的粗线是40-20。 turtle.pencolor("#ffecff")      # 设置内部棒棒的颜色为 #ffecaf (一种浅黄色) turtle.backward(270-6)          # 海龟向后退 270-6 步(像素)       # 重置海龟的朝向,即回到默认 turtle.setheading(0)            # 不管海龟之前是朝那个方向多少度,这个设置都可以使海龟的头部水平朝右,即回到默认方向。 turtle.goto(0,100)              # 使海龟移动至坐标(0,100)。只要前面画棒时前进后退的参数设置的合理, # 海龟就已经回到了坐标(0,100)位置,但为了保险起见还是再设置一次。 ### ② 画圆形糖(加描边) # 描边可通过画内外两个直径和颜色不同的圆点重叠来实现 turtle.dot(240,"#ff54dd")      # 画直径为 240 ,颜色为 #93543d 的圆点。一种类似巧克力的颜色。 turtle.dot(240-20,"#fcddff")    # 画直径为 240-20 ,颜色为 #fcd3d1 的圆点。这个颜色是浅粉色 ### ③ 画圆形螺旋线 # 直接画出的螺旋线会偏向左下方,所以要将坐标向右上方移动 # 海龟抬笔,向右上方移动 turtle.penup()                  # 画笔抬起,则海龟行走时不会留下痕迹。 turtle.goto(0+10,100+10)        # 将螺旋线起点坐标位置向右上方移动,即将x和y坐标都增加10       turtle.pendown()                # 画笔落下,海龟行走时才会留下痕迹。 # 设置圆形螺旋线的颜色和粗线 # 不建议使用纯白色#ffffff,因为纯白色太刺眼又和周围的颜色对比太明显,所以会使得图案色彩搭配不柔和。 turtle.pencolor("#fc7399")      # 设置画笔的颜色为 #fc7397 ,一种玫红色。即设置螺旋线的颜色。 turtle.pensize(15)              # 设置画笔的粗线为 15 ,即设置螺旋线的粗线。 # 画圆形螺旋线(持续增加半径画圆弧的同时,再向内旋转一定的角度来减小离心距离) for i in range(37):           turtle.circle(5*i,10) # 画半径为 5*i ,角度为 10 的圆弧。(这个参数是不断调试的结果) turtle.left(10) # 海龟向左转向10度。即逆时针向圆弧内转。度数越大,离心效果越小;反之亦然。 # 海龟画图结束,隐藏表示海龟的箭头 turtle.hideturtle()       turtle.done() ```