2016-12-12 108 views
1

好吧,我一整天都在這裏,一點也不知道。我需要讓我的烏龜對象在之外畫一個圓圈python中的龜內圈邊界

我已經做了限制之前的邊界內的隨機線的代碼,所以我認爲我所要做的只是改變標誌,但沒有奏效。我不能用座標幾何 - 它有更多的東西基本...

這裏是我的代碼,在它的當前格式:

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) 

回答

0

這是不是你想要做什麼?它也基於最初的代碼kept the turtle within a circle。它採用Python3龜的撤消能力,讓龜不慎信步走進圓,然後撤消事故,就好像它從來沒有發生過:

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

+0

好吧,我喜歡你做了什麼,但是,當我試圖將自己的代碼適應礦(用於分配),它仍然越過。也許我簡單化了它,但是我所做的只是在crw後刪除所有內容,然後添加第一個if條件(我無法在代碼中正確顯示代碼)。 – PolitEcon2016

+0

你能向我解釋你的bounded_random_move函數嗎? – PolitEcon2016

+0

@ PolitEcon2016,'bounded_random_move()'函數向當前方向前進了一步。它測試這是不是一個好主意(即我們是否進入圈子或離開窗口邊界)。如果這是一個糟糕的主意,它會解除它(把它的位置恢復到移動前的位置)並進行掉頭(但不會向前移動)。無論移動的好壞,它都會進行額外的輕微轉動(絆腳石效應),並在100ms內啓動另一個對此功能的調用的定時器。讓我知道你想要更詳細地描述哪部分內容。 – cdlane