用python的turtle库进行多海龟绘图

在python中可以利用面向对象的方法设置多个海龟,现在想多个海龟同时绘制图形,如何操作呢?

首先想到的是利用多线程,经过测试,两个线程的海龟可以基本保持同步,但线程数过多,则海龟们出现步调不一致。

因此考虑多个海龟轮流绘制图形的方法,例如有3个海龟,首先第一个海龟走一小段距离,接着第二个海龟走一小段距离,然后第三个海龟走一小段距离,接下来第一个海龟走一小段距离,然后第二个海龟走一小段距离,然后第三个海龟走一小段距离,以此循环。从理论上说,这虽然不是多个海龟同时绘制图形,但可以在视觉上造成多海龟同时绘制的假象。

下面以五个海龟绘制五角星为例:

 

import turtle
import math

colorList = ["red","darkgreen" ,"purple" , "violet" , "gold"]
turtleList = []
for i in range(5):
    turtleList.append(turtle.Turtle(shape = 'turtle'))

for i in range(5):
    turtleList[i].color(colorList[i])
    turtleList[i].pensize(3)

#设置5个海龟到五角星顶点的位置
turtleList[0].setposition(100*math.cos(math.pi/10),100*math.sin(math.pi/10))
turtleList[0].lt(180)
turtleList[1].setposition(0,100)
turtleList[1].rt(108)
turtleList[2].setposition(-100*math.cos(math.pi/10),100*math.sin(math.pi/10))
turtleList[2].rt(36)
turtleList[3].setposition(-100*math.cos(3*math.pi/10),-100*math.sin(3*math.pi/10))
turtleList[3].lt(36)
turtleList[4].setposition(100*math.cos(3*math.pi/10),-100*math.sin(3*math.pi/10))
turtleList[4].lt(108)

# 各海龟轮流前进一小步,造成同步的效果
for i in range(int(200*math.cos(math.pi/10))):
    for j in range(5):
        turtleList[j].fd(1)

turtle.done()

  • 13
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python turtle模块是一个绘图工具,它提供了一个画布和一个或多个画笔,你可以使用这些画笔来绘制各种形状。如果你想同时使用两个画笔绘制不同的形状,可以使用turtle模块中的`TurtleScreen`对象和`Turtle`对象。 首先,你需要创建两个`Turtle`对象,分别代表两个画笔。然后,你可以使用`TurtleScreen`对象的`register_shape()`方法自定义画笔的形状,使用`Turtle`对象的`shape()`方法选择画笔形状,使用`Turtle`对象的`penup()`、`pendown()`、`pencolor()`等方法控制画笔的行为。 下面是一个例子,演示如何同时使用两个画笔绘制不同的形状: ```python import turtle # 创建两个画笔 pen1 = turtle.Turtle() pen2 = turtle.Turtle() # 自定义画笔形状 turtle.Screen().register_shape("star", ((-10,-10), (0,-5), (10,-10), (5,0), (10,10), (0,5), (-10,10), (-5,0))) # 设置画笔形状和行为 pen1.shape("turtle") pen1.pencolor("red") pen1.penup() pen1.goto(-100, 0) pen1.pendown() pen2.shape("star") pen2.pencolor("blue") pen2.penup() pen2.goto(100, 0) pen2.pendown() # 绘制图形 for i in range(5): pen1.forward(100) pen1.right(144) pen2.forward(100) pen2.right(144) turtle.done() ``` 在这个例子中,我们创建了两个画笔`pen1`和`pen2`,并使用`register_shape()`方法自定义了一个名为`star`的形状,然后分别设置了两个画笔的形状、颜色、起始位置和行为,最后使用`for`循环绘制了两个不同的五角星。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值