Turtle Graphics"如果触摸颜色"

时间:2017-01-12 22:36:07

标签: python turtle-graphics

我正在尝试在Turtle中制作一个程序,绘制一棵圣诞树,然后是一些小玩意儿,我想把它随机放在树上。然而,因为圣诞树是不规则的形状,我不能通过随机选择x和y坐标来放置小玩意。有没有办法随机将小玩意放在树上? 我正在考虑一个" turtle.pendown()"然后"如果turtle.pen触摸"绿色""但我不知道如何编码。 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

一种简单的图形方法是:

  1. 查找具有routine for performing the "point in polygon" inclusion的Python模块 测试

  2. 使用海龟的begin_poly()end_poly()get_poly()捕获 绘制树时代码生成的顶点

  3. 在树的边界框内随机生成饰物但是 还应用交叉编号测试来查看他们的中心是否已打开 树

  4. 这是一个使用(特殊)抽象树和装饰的示例实现:

    from turtle import Turtle, Screen
    from random import randrange, choice
    from point_in_polygon import cn_PnPoly
    
    screen = Screen()
    
    WINDOW_WIDTH, WINDOW_HEIGHT = screen.window_width(), screen.window_height()
    
    COLORS = ["red", "yellow", "gold", "blue", "white", "pink"]
    
    def draw_abstract_tree(turtle):
        width = WINDOW_WIDTH//4
    
        turtle.penup()
        turtle.goto(0, -WINDOW_HEIGHT//4)
        turtle.pendown()
    
        for _ in range(8):
            turtle.forward(width)
            turtle.left(150)
            turtle.forward(1.156 * width)
            turtle.right(150)
            width *= 0.9
    
        turtle.left(210)
    
        for _ in range(8):
            turtle.forward(1.156 * width)
            turtle.left(150)
            turtle.forward(width)
            turtle.right(150)
            width /= 0.9
    
        turtle.goto(0, -WINDOW_HEIGHT//4)
    
        turtle.setheading(0)
    
    def decorate_tree(turtle, polygon):
        turtle.penup()
    
        for _ in range(1000):
            x = randrange(-WINDOW_WIDTH/4, WINDOW_WIDTH/4)
            y = randrange(-WINDOW_HEIGHT/4, WINDOW_HEIGHT)
            diameter = randrange(1, 12)
    
            if cn_PnPoly((x, y), polygon):
                turtle.goto(x, y)
                turtle.color(choice(COLORS))
                turtle.dot(diameter)
    
    yertle = Turtle(visible=False)
    yertle.speed("fastest")
    yertle.color("darkgreen")
    
    yertle.begin_poly()
    draw_abstract_tree(yertle)
    yertle.end_poly()
    
    polygon = yertle.get_poly()
    
    yertle.begin_fill()
    draw_abstract_tree(yertle)
    yertle.end_fill()
    
    decorate_tree(yertle, polygon)
    
    screen.exitonclick()
    

    输出

    enter image description here

答案 1 :(得分:0)

我认为turtle没有检查颜色的方法。

但是turtle使用来自Canvas的{​​{1}} tkinter来检查某个对象是否与此矩形重叠。也许它可行。也许你可以检查一些小的矩形在随机的地方是否有树。