如何使用Python中的龟图形生成随机星?

时间:2017-04-14 06:50:53

标签: python python-3.x colors turtle-graphics

我是Python中的龟图形新手,我遇到了一些特定问题的问题。我正在尝试生成一个使用while循环从星形中心绘制随机锯齿线的星星。

每一行的距离应为250.我在循环中使用penup pendownsetpos命令绘制这些随机行,每行应该是随机的颜色。

以下是我希望产生的内容:random star

这是我到目前为止的代码:

# tg_random_star.py

from random import randrange
from turtle import *

MAX_ANGLE = 30

def jaggedLine(turtle, pieces, pieceLength):

    for i in range(pieces):
        turtle.forward(pieceLength)
        r = randrange(-MAX_ANGLE, MAX_ANGLE + 1)
        turtle.right(r)

def jumpToCenter(turtle):
    turtle.penup()
    turtle.setpos(0, 0)
    turtle.pendown()

def randomColor(turtle):
    turtle.colormode(255)
    r = randrange(255)    # red component of color
    g = randrange(255)    # green component
    b = randrange(255)    # blue component

    turtle.pencolor(r, g, b)

def main():
    colormode(255)
    t = Turtle()
    jaggedLine(t, 10, 30)
    jumpToCenter(t)
    jaggedLine(t, 10, 30)

if __name__ == "__main__":
    main()

它目前生成2行,但turtle.pencolor(r, g, b)colormode(255)似乎不起作用,因为两行都是黑色的。知道为什么这些线没有颜色吗?

我不是使用for i in range(pieces)来绘制基于段数的行,而是如何使用while循环绘制每条距离为250的锯齿状线?换句话说,我想在从中心绘制新线之前,每条线的距离为250。

(也许我可以使用xcorycor方法找到海龟的位置,然后使用距离公式计算距离?)

def distance(p0, p1):
return math.sqrt((p0[0] - p1[0])**2 + (p0[1] - p1[1])**2)`

任何帮助或解释都将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:0)

  

知道为什么这些线条没有颜色?

那很容易,因为你从未真正致电randomColor()

  

而不是在范围(片段)中使用i来绘制基于的行   关于段数,我如何使用while循环绘制锯齿状   每条线的距离为250?

在这里,我们可以利用未充分利用的.distance()乌龟方法来告诉我们离中心有多远。这是直线距离,而不是路径行进距离,这似乎与您的目标插图相符:

from random import randrange
from turtle import Turtle, Screen

MAX_ANGLE = 30
MAX_DISTANCE = 250

def jaggedLine(turtle, pieceLength):
    randomColor(turtle)

    while turtle.distance(0, 0) < MAX_DISTANCE:
        angle = randrange(-MAX_ANGLE, MAX_ANGLE + 1)
        turtle.right(angle)
        turtle.forward(pieceLength)

def jumpToCenter(turtle):
    turtle.penup()
    turtle.home()
    turtle.pendown()

def randomColor(turtle):
    r = randrange(255)  # red component of color
    g = randrange(255)  # green component
    b = randrange(255)  # blue component

    turtle.pencolor(r, g, b)

def main():
    s = Screen()
    s.colormode(255)
    t = Turtle()
    t.pensize(2)
    t.speed('fastest')  # because I have no patience

    for angle in range(0, 360, 2):
        jumpToCenter(t)
        t.setheading(angle)
        jaggedLine(t, 30)

    t.hideturtle()

    s.mainloop()

if __name__ == "__main__":
    main()

<强>输出

enter image description here