在python的乌龟内圈边界

时间:2016-12-12 06:46:30

标签: python-3.x turtle-graphics

好的,我整天都在这里,并没有任何线索。我需要让我的乌龟对象在一个圆圈的外面绘制随机线条。

我之前制作的代码限制了边界内的随机行,所以我认为我所要做的就是更改符号,但这不起作用。我不允许使用坐标几何 - 它必须是更基本的东西......

这是我当前格式的代码:

import turtle, random
mRoshi = turtle.Turtle()

def draw_any_shape(myTurtle, sideLength, numSides):
    turnAng = 360/numSides
    for i in range(numSides):
        myTurtle.forward(sideLength)
        myTurtle.right(turnAng)

def drawCircle(myTurtle, radius, startX, startY):
    circumference = 2*3.1415*radius
    sideLength = circumference/360
    myTurtle.penup()
    myTurtle.goto(startX, startY)
    #myTurtle.dot()
    myTurtle.goto(startX, startY+radius)
    myTurtle.pendown()
    draw_any_shape(myTurtle, sideLength, 360)


def stumblingTurtle(myTurtle, radius, startX, startY, paramN5):
    circumference = 2*3.1415*radius
    myTurtle.speed(6)
    drawCircle(myTurtle, radius, startX, startY)
    myTurtle.penup()
    for i in range(paramN5):
        drx = random.randint(-800, 800)
        drw = random.randint(-800, 800)
        if (drx**2 + drw**2) > radius**2:
            myTurtle.goto(drx,drw)
        crx = random.randint(-800, 800)
        crw = random.randint(-800, 800)
        xdif = crx-drx
        ydif = crw-drw
        for j in range(drx, crx):
            for k in range(drw, crw):
                if (xdif**2 + ydif**2) > radius**2:
                    myTurtle.goto(crx,crw)

1 个答案:

答案 0 :(得分:0)

这样做你想要的吗?它也基于最初kept the turtle within a circle的代码。它使用Python3 turtle的撤消功能,允许乌龟意外地徘徊在圆圈中,然后撤消该事故,就像它从未发生过一样:

import turtle
import random

RADIUS = 50
MAXIMUM_TURN = 45
STEP_SIZE = 10
BORDER = 20

def bounded_random_move():

    yertle.forward(STEP_SIZE)

    x, y = yertle.position()

    if (x * x + y * y) < RADIUS * RADIUS or x < -window_width/2 or x > window_width/2 or y < -window_height/2 or y > window_height/2:
        yertle.undo()  # undo misstep
        turn = random.randint(180 - MAXIMUM_TURN, 180 + MAXIMUM_TURN)
        yertle.left(turn)

    turtle.ontimer(bounded_random_move, 100)

turtle.setup(RADIUS * 10, RADIUS * 10)

window_width = turtle.window_width() - BORDER
window_height = turtle.window_height() - BORDER

magic_marker = turtle.Turtle(visible=False)
magic_marker.penup()
magic_marker.color("red")
magic_marker.sety(-RADIUS)
magic_marker.pendown()
magic_marker.circle(RADIUS)

yertle = turtle.Turtle(shape="turtle", visible=False)
yertle.speed("fastest")
yertle.penup()
yertle.goto(RADIUS * 2, RADIUS * 2)  # start outside circle
yertle.pendown()
yertle.showturtle()

turtle.ontimer(bounded_random_move, 100)

turtle.exitonclick()

然而,对于每个人来说,我的撤销技巧可能不够严谨。

enter image description here