在Python中,有一个内置的绘图模块,就是turtle。我们可以用它来绘制一些有趣的图形。

多边形

1、三边的效果:

Python的turtle库还能绘制这些有趣图形?_python


2、六边的效果:

Python的turtle库还能绘制这些有趣图形?_经验分享_02


是不是觉得非常挺炫酷的,但其实实现它的代码非常简单,仅仅10行Python代码就能实现。不过这都依赖于强大的turtle库。

3、多边形测试代码:

import turtle  #导入turtle库
t = turtle.Pen() #创建turtle对象
turtle.bgcolor("black") #设置背景颜色
sides = int(input('你需要绘制几边形:')) #人性化输入需要绘制的边数
colors = ["red", "yellow", "green", "blue", "orange", "purple"] #线条的颜色
for x in range(360): #开始绘制图形,360为一个循环形成封闭
t.pencolor(colors[x % sides])
t.forward(x * 3 / sides + x)
t.left(360 / sides + 1)
t.width(x * sides / 200)

4、side+5:

代码很简单,也做了相应的注释,里面很多地方都可以根据自己的需要改动,就可能出现你意想不到的效果。边长、背景颜色和线条颜色就不说了,for循环中的算法也可以改动,比如我把side+5后:

Python的turtle库还能绘制这些有趣图形?_经验分享_03


就成了这样,是不是挺好玩的。

5、修改规则:

我再把里面的规则改成这样:

for x in range(360):
t.pencolor(colors[x%sides])
t.forward(x*3/sides+x)
t.left(360/sides+1)
t.width(x*sides/180)
t.left(91)

就出现了橡皮球效果:

Python的turtle库还能绘制这些有趣图形?_ide_04

浩瀚星辰

还有另外一种玩法,也是类似的转圈圈绘图,这次绘制的是一幅浩瀚星辰

Python的turtle库还能绘制这些有趣图形?_random_05


这就是浩瀚星辰的效果,绘制方式也很简单

1、首先导入turtle模块和random模块(一个画图模块、一个随机模块)

import turtle
import

2、然后就是初始化一个画笔

turtle.bgcolor(0/255, 34/255, 64/255) # RGB 红绿蓝三色的值 0-1 0-255
turtle.hideturtle() # 隐藏画笔
turtle.speed(0) #画笔运动的速度
turtle.color(1,1,1) # 白色
turtle.penup() #抬笔
turtle.pensize(2) #画笔的粗细

3、之后需要定义两个变量来统计半径和圆弧

radius = 5  # 半径
acc_ext = 0 # 累计圆弧

4、然后就可以无限循环来画圆了

while True:  # 无限循环
# 随机圆弧
# 计数看总的圆弧长度是不是超过了360度
extent = random.random() * 90 #0-90的随机数
color = random.choice([(1,1,1),(0/255, 34/255, 64/255)]) #白色和另外一种颜色交替
turtle.color(color)
turtle.circle(radius, extent) #开始画圆
acc_ext += extent #不断延伸
if acc_ext > 360: #如果
acc_ext = 0
radius += 3
turtle.penup()
turtle.goto(0, -radius)
turtle.pendown()
turtle.setheading(0) # 把头摆正

这样,就实现了一个浩瀚星辰的效果,当然,里面的参数也可以根据自己的需要来改;多试试就知道它到底是有多好玩了

比如我就加了一点代码,做成了一幅星空+星辰:

Python的turtle库还能绘制这些有趣图形?_random_06


Python的turtle库还能绘制这些有趣图形?_python_07


可以看到,后面那一点一点的就是星空了,它们都是动态的,星空里的星星会一点一点得点上去,星辰会不断得转圈圈

5、星空+星辰测试代码

#导入模块
from turtle import *
from random import *

#用turtle画星空背景
s = Screen()
s.title('星空+星辰@栀丶子')
w, h = 700, 700
s.setup(w, h)
s.bgcolor('black')
star = Turtle()
star.shape('circle')
star.shapesize(0.05,0.05)
star.color('white')
star.pu()
star.speed(6) #为0是瞬间画好
for i in range(150):
x = randint(-w/2, w/2) #全称random.randint
y = randint(-h/2, h/2)
star.goto(x, y)
star.stamp() #印下去


#画浩瀚星辰
cycle = Turtle()
cycle.ht() #turtle.hideturtle()
cycle.speed(0)
cycle.color('white')
cycle.pu()
cycle.pensize(2)
radius = 5 #圈的半径
acc_ext = 0 #累计圆弧
for i in range(1000):
extent = random() * 90 #0到90的随机数,每次画的圆弧长度是随机的
color = choice([(1,1,1),(0/255, 0/255, 0/255)]) #白色和黑色当中随机选色
cycle.color(color)
cycle.circle(radius, extent)
acc_ext += extent #统计圆弧的长度
if acc_ext > 360: #若正好一圈,则半径增加3
acc_ext = 0
radius += 3
cycle.penup()
cycle.goto(0,-radius) #每圈画笔的起点为圆心的向下一个半径位置
cycle.pendown() #pendown落笔,准备重新开始画
cycle.setheading(0) #把头摆正,方向0度为向右