我正在尝试在Turtle中制作一个程序,绘制一棵圣诞树,然后是一些小玩意儿,我想把它随机放在树上。然而,因为圣诞树是不规则的形状,我不能通过随机选择x和y坐标来放置小玩意。有没有办法随机将小玩意放在树上? 我正在考虑一个" turtle.pendown()"然后"如果turtle.pen触摸"绿色""但我不知道如何编码。 任何帮助将不胜感激。
答案 0 :(得分:1)
一种简单的图形方法是:
查找具有routine for performing the "point in polygon" inclusion的Python模块 测试
使用海龟的begin_poly()
,end_poly()
和get_poly()
捕获
绘制树时代码生成的顶点
在树的边界框内随机生成饰物但是 还应用交叉编号测试来查看他们的中心是否已打开 树
这是一个使用(特殊)抽象树和装饰的示例实现:
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()
输出
答案 1 :(得分:0)
我认为turtle
没有检查颜色的方法。
但是turtle
使用来自Canvas
的{{1}} tkinter
来检查某个对象是否与此矩形重叠。也许它可行。也许你可以检查一些小的矩形在随机的地方是否有树。