首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何逐步抹去海龟在巨蟒中追踪的路径?

如何逐步抹去海龟在巨蟒中追踪的路径?
EN

Stack Overflow用户
提问于 2020-05-22 11:28:56
回答 2查看 561关注 0票数 0

我一直在用蟒蛇制作一些程序,我想看看乌龟追踪的路径,我知道turtle.penup()让乌龟抬起,turtle.clear()清除了一切,但这不是我想要的,我希望海龟的路径逐渐褪色,直到它被抹去,那么我有什么办法做到这一点呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-22 20:38:10

我希望海龟追踪的路径逐渐褪色,直到它被抹去,那么我有什么方法可以做到这一点呢?

海龟身上没有什么东西能支撑这一切。下面是我对大量海龟和定时器逐渐褪色的粗略模拟:

代码语言:javascript
复制
from turtle import Screen, Turtle

PEN_WIDTH = 5
SEGMENTS_PER_LINE = 12
MILLISECONDS_PER_FADE = 500
AMOUNT_PER_FADE = 0.05

def fade_forward(t, distance):
    stride = delta = distance / SEGMENTS_PER_LINE
    heading = t.heading()

    while stride < distance:
        position = t.position()
        t.forward(delta)

        fader = faders.pop() if faders else fader_prototype.clone()
        fader.setheading(heading)
        fade(fader, position, delta)

        t.clear()
        stride += delta

def fade(f, position, distance, shade=0.0):
    screen.tracer(False)
    f.clear()

    if shade < 1.0:
        f.pencolor(shade, shade, shade)
        f.setposition(position)
        f.pendown()
        f.forward(distance)
        f.penup()

        shade += AMOUNT_PER_FADE
        screen.ontimer(lambda: fade(f, position, distance, shade), MILLISECONDS_PER_FADE)
    else:
        faders.append(f)

    screen.tracer(True)

faders = []

screen = Screen()

fader_prototype = Turtle()
fader_prototype.hideturtle()
fader_prototype.speed('fastest')
fader_prototype.width(PEN_WIDTH)
fader_prototype.penup()

turtle = Turtle()
turtle.shape('turtle')
turtle.width(PEN_WIDTH)
turtle.penup()
turtle.setposition(-170, -125)
turtle.pendown()

for _ in range(10):
    fade_forward(turtle, 340)
    turtle.left(126)
    fade_forward(turtle, 400)
    turtle.left(126)

screen.exitonclick()

票数 2
EN

Stack Overflow用户

发布于 2020-05-24 14:36:24

看看这个,来自turtledemo源代码:

代码语言:javascript
复制
from turtle import Screen, Turtle, mainloop
from time import perf_counter, sleep

def mn_eck(p, ne,sz):
    turtlelist = [p]
    #create ne-1 additional turtles
    for i in range(1,ne):
        q = p.clone()
        q.rt(360.0/ne)
        turtlelist.append(q)
        p = q
    for i in range(ne):
        c = abs(ne/2.0-i)/(ne*.7)
        # let those ne turtles make a step
        # in parallel:
        for t in turtlelist:
            t.rt(360./ne)
            t.pencolor(1-c,0,c)
            t.fd(sz)

def main():
    s = Screen()
    s.bgcolor("black")
    p=Turtle()
    p.speed(0)
    p.hideturtle()
    p.pencolor("red")
    p.pensize(3)

    s.tracer(36,0)

    at = perf_counter()
    mn_eck(p, 36, 19)
    et = perf_counter()
    z1 = et-at

    sleep(1)

    at = perf_counter()
    while any([t.undobufferentries() for t in s.turtles()]):
        for t in s.turtles():
            t.undo()
    et = perf_counter()
    return "runtime: %.3f sec" % (z1+et-at)


if __name__ == '__main__':
    msg = main()
    print(msg)
    mainloop()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61953981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档