2016-12-12 5 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のコードに基づいています。

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() 

マイアンドゥトリックはしかし、皆のために十分に厳格ではないかもしれません:それはのpython3の亀のが、それは決して起こらなかったかのように亀が誤ってその事故を円形にさまよい、その後、元に戻すことができるように機能を元に戻す使用しています。

enter image description here

+0

さて、私はあなたが何をしたかように、しかし、私は(割り当て用)鉱山にあなたのコードを適応しようとしたとき、それはまだ渡りました。多分私はそれを単純化しているかもしれませんが、私がしたことは、crwの後のすべてを取り除き、最初のif条件を追加することでした(コメントに正しく表示するコードを取得できませんでした)。 – PolitEcon2016

+0

bounded_random_move関数を私に説明できますか? – PolitEcon2016

+0

@ PolitEcon2016、 'bounded_random_move()'関数は現在の方向に一歩前進します。それが良い考えではないかどうかをテストします(つまり、サークルに入ったり、ウィンドウの境界から外れたりしたかどうか)。それが悪い考えであれば、それはそれを取り消し(移動前に位置を戻す)、Uターンを行います(しかし前進しません)。良いか悪いかにかかわらず、この機能への別の呼び出しのためのタイマーを100msecに設定します。あなたが細かい詳細で説明したい部分を教えてください。 – cdlane

関連する問題