【问题标题】:How to show two lines overlapping in turtle graphics如何在海龟图形中显示两条重叠的线
【发布时间】:2020-01-25 18:16:28
【问题描述】:

Screenshot of output image

我使用海龟制作了一个随机游走程序,我希望它通过改变颜色来显示两只海龟交叉路径的位置。

`import turtle as T
 import random as R
 t = T.Turtle()
 u = T.Turtle()
 t.speed(0)
 u.speed(0)
 t.hideturtle()
 u.hideturtle()
 t.color("red")
 u.color("blue")
 def randWalk(num):
     for i in range(0, num):
         x = R.choice((-1,1))
         X = R.choice((-1,1))
         y = R.choice((-1,1))
         Y = R.choice((-1,1))
         t.forward(x)
         u.forward(X)
         if y == 1:
             t.left(90)
             t.forward(1)
         else:
             t.right(90)
             t.forward(1)
         if Y == 1:
             u.left(90)
             u.forward(1)
         else:
             u.right(90)
             u.forward(1)    
 randWalk(4000)`

【问题讨论】:

    标签: python python-3.x random turtle-graphics random-walk


    【解决方案1】:

    Turtle 无法询问屏幕上当前是什么颜色,因此解决此问题的一种方法可能是拥有某种 后备存储,您可以在其中跟踪将哪种颜色写入哪个像素.下面是一个使用 Python 列表的粗略示例:

    from turtle import Screen, Turtle
    from random import choice
    
    WIDTH, HEIGHT = 300, 300
    
    PEN_COLORS = ['red', 'blue']
    
    OVERLAP_COLOR = 'green'
    
    def randWalk(number):
        for _ in range(number):
            for turtle in turtles:
                direction = choice((-1, 1))
                turtle.forward(direction)
    
                x, y = map(round, turtle.position())
                old_color = color = turtle.pencolor()
                turtle.undo()  # undo forward()
    
                if grid[y][x] and grid[y][x] != color:
                    color = OVERLAP_COLOR
    
                turtle.pencolor(color)
                turtle.goto(x, y)  # redo forward()
                turtle.pencolor(old_color)
    
                grid[y][x] = color
    
                choice((turtle.left, turtle.right))(90)
    
            screen.update()
    
    screen = Screen()
    screen.setup(WIDTH, HEIGHT)
    screen.tracer(False)
    
    grid = [[None] * WIDTH for _ in range(HEIGHT)]
    
    turtles = []
    
    for color in PEN_COLORS:
        turtle = Turtle()
        turtle.hideturtle()
        turtle.pencolor(color)
    
        turtles.append(turtle)
    
    randWalk(4000)
    
    screen.tracer(True)
    screen.exitonclick()
    

    由于海龟在浮点平面上行走,代码中存在额外的复杂性,但我们需要将其强制转换为整数平面以容纳我们的后备存储并减少不需要的绘图伪影。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-30
      • 1970-01-01
      • 1970-01-01
      • 2016-03-06
      • 2013-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多