2016-12-12 3 views
1

Хорошо, я был на этом весь день и понятия не имею. Мне нужно, чтобы мой объект черепахи рисовал случайные линии снаружи круга.граница внутреннего круга черепахи в питоне

Я сделал код, который раньше ограничивал случайные строки в границах, поэтому я думал, что все, что мне нужно было сделать, это изменить знак, но это не сработало. Я не допускается использование координатной геометрии - это должно быть нечто большее, ...

Вот мой код в его нынешнем формате:

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() 'делает шаг вперед в текущем направлении. Он проверяет, не было ли это хорошей идеей (т. Е. Мы вошли в круг или вне границ окна). Если это была плохая идея, она отменяет ее (переставляя ее позицию назад перед движением) и делает разворот (но не движется вперед). Независимо от хорошего или плохого хода, он затем делает дополнительный небольшой поворот (эффект преткновения) и устанавливает таймер для другого вызова этой функции в 100 мс. Дайте мне знать, какую часть этого вы хотели бы описать более подробно. – cdlane

Смежные вопросы