Python 画图 - Turtle 模块 (1)

最近接触到 Python的一个绘图模块 Turtle,很有趣也很容易的一个模块。花了2个小时的时间学习了一下相关的函数。这个模块的文档链接如下。

https://docs.python.org/3/library/turtle.html

简单的说,可以把画板想象成一个X-Y的坐标轴,原点就在中间,一个海龟在坐标图里面到处跑,他的爬行痕迹就是我们生成的图形。我们可以通过控制坐标的位置,方向,颜色,基本图形和移动方向来创建各种有趣的图案。

比如说,我打算生成一个随机的线路,每次转变方向用不同的颜色表示。


from turtle import Turtle, Screen
import random
import colorgram
import turtle as t

#设置颜色类型为RGB格式,默认为字符串
t.colormode(255)
tim = Turtle()

#设置一个随机的方向选择
options=[0,90,180,270]

#生成随机的RGB元组
def randomcolor():

    r= random.randint(0,255)
    g= random.randint(0,255)
    b = random.randint(0, 255)
    return  (r,g,b)

tim.speed('fastest')

#随机选择一个方向,选择一个颜色,线条加粗
def randomwalk():

    tim.setheading(random.choice(options))
    tim.color(randomcolor())
    tim.speed('fast')
    tim.pensize(10)
    tim.forward(20)

for i in range(100):
    randomwalk()

screen = Screen()
screen.exitonclick()

Python 画图 - Turtle 模块 (1)

再比如说 我打算生成一个万花筒,其实就是画圆,每次画圆,偏移一定的角度,随机生成一些颜色就行了

from turtle import Turtle, Screen
import random
import colorgram
import turtle as t

#设定颜色模式,不然默认是字符串的格式,而不是RGB的格式
t.colormode(255)
tim = Turtle()

#生成一个随机的RGB的元组

def randomcolor():
    r= random.randint(0,255)
    g= random.randint(0,255)
    b = random.randint(0, 255)
    return  (r,g,b)

tim.speed('fastest')

def draw_spirograph(size):
    for i in range(int(360/size)):

        tim.circle(100)
        tim.color(randomcolor())
        print(tim.heading())

                #每次画圆都偏移一下方向
        current_heading=tim.heading()
        tim.setheading(current_heading+size)
tim.circle(100)

draw_spirograph(10)

#下面的部分是生成一个画板界面,点击退出,不然默认一闪而过就没有了

screen = Screen()
screen.exitonclick()

效果如下

Python 画图 - Turtle 模块 (1)

最后再看一个例子,如何生成了一个10X10的 点图。说起点图,最出名的是一个叫 Damie Hirst的艺术家,他的点图能卖个上百万美元 ??!! 艺术品大概就和下面的样子差不多。

Python 画图 - Turtle 模块 (1)

那么用我们的海龟模块,我们可以很轻松的模拟一个出来。 首先下载一个Damie的大作,转换成jpg格式,通过colorgram的模块 我们可以获取到Damie到底使用了哪些颜色的RGB,保存为一个列表,我们就可以随机地获取颜色生成自己的点图了。

from turtle import Turtle, Screen
import random
import colorgram
import turtle as t

#设置颜色模式为RGB
t.colormode(255)
tim = Turtle()

#从一个现有的jpg图获取主要的色彩

colors=colorgram.extract('spot.jpg',20)

colorlist=[]
for color in colors:
    # print(color.rgb)
    colorlist.append((color.rgb.r,color.rgb.g,color.rgb.b))

print(colorlist)

#隐藏海龟的小图标和画图的路径,设置爬行速度为最快
tim.penup()
tim.hideturtle()
tim.speed('fastest')

#因为海龟默认是从原点(图正中央)开始爬,如果内容太多的话可能会爬出边界,所以我先把他的坐标往左下方挪一挪

tim.setheading(225)
tim.forward(300)
tim.setheading(0)
currentlocation=tim.position()
print(currentlocation)

#简单的双重循环,每次生成一个随机颜色的点,唯一注意的就是海龟爬的方向和坐标了

for i in range(10):
    for j in range(10):
        tim.dot(30,random.choice(colorlist))
        tim.forward(40)

    tim.setposition((currentlocation[0]),40*(i+1)+currentlocation[1])

#这个screen的对象保证画板需要手动关闭

screen = Screen()
screen.exitonclick()

最后效果如下

Python 画图 - Turtle 模块 (1)

猜你喜欢

转载自blog.51cto.com/beanxyz/2551238
今日推荐