2015-04-26 3 views
2

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

Размер большого круга зависит от того, называются ли «малые», «средние» или «большие», и мне нужны маленькие круги, чтобы оставаться в пределах радиуса каждого круга.

def drawCircle(myTurtle, radius): 
     circumference = 2 * 3.1415 * radius 
     sideLength = circumference/360 
     drawPolygon(myTurtle,sideLength,360) 

Как использовать случайное размещение кругов с меньшими радиусами в пределах начального круга?

ответ

0

Вы могли бы попробовать что-то вроде этого

from turtle import * 


def drawcircles(circum): #multiples of 10 
    while circum > 0: 
     circle(circum) 
     circum -= 10 
     penup() 
     left(90) 
     forward(10) 
     right(90) 
     pendown() 

drawcircles(50) 

exitonclick() 

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

0

Чтобы убедиться, что вложенные круги остаются в окружении, лучшей стратегией может быть всегда возвращение в центр внешнего круга. Вы должны сделать это в своей функции draw_circle. Таким образом, вы всегда знаете, где находится черепаха, и насколько далеко она может двигаться, не покидая замкнутого круга.

После нанесения внешнего круга (и возвращение к его центру), затем можно превратить случайную величину, определить случайную меньшего радиуса, перемещать случайное количество до больше-радиуса - меньший радиус от центр внешнего круга, нарисуйте меньший круг, вернитесь в центр внешнего круга и снова запишите.

Вот код, который делает это:

from turtle import * 
import random 

def draw_circle(radius, angle): 
    circumference = 2 * 3.1415 * radius 
    side_length = circumference/(360/angle) 
    penup() 
    forward(radius) 
    right(90) 
    pendown() 
    for i in range(360/angle): 
     forward(side_length) 
     right(angle) 
    penup() 
    left(90) 
    backward(radius) 

def draw_random_circle(outer_radius, angle): 
    radius = random.randint(1, outer_radius/2) 
    distance = random.randint(0, outer_radius - radius) 
    segment = random.randint(0, 360) 
    right(segment) 
    forward(distance) 
    draw_circle(radius, angle) 
    backward(distance) 
    left(segment) 

draw_circle(100, 6) 
for i in range(10): 
    draw_random_circle(100, 6) 
done() 

Пример:

enter image description here

0

Пусть ваш больший круг имеет радиус R, с вашим меньшим кругом, имеющим радиусом r. Это означает, что центр вашего маленького круга должен находиться в пределах круга радиуса R-r, так что меньший круг не превышает более крупный.

Предположим, что ваш большой круг находится на circle_x, circle_y, с радиусом R. Меньшие круги будут иметь радиус r.

Импорт:

from math import sqrt 
from random import uniform 

Необходимые переменные:

center_x: Center x of large circle 
center_y: Center y of large circle 
R: radius of large circle 
r: radius of small circle 

Код:

def draw_circle(): 
    radius_bound = R - r 
    center_x = uniform(circle_x - radius_bound, circle_x + radius_bound) 
    x_offset = center_x - circle_x 
    y_limit = sqrt(radius_bound ** 2 - x_offset ** 2) 
    center_y = uniform(circle_y - y_limit, circle_y + y_limit) 
    my_turtle.penup() 
    my_turtle.goto(center_x, center_y - r) 
    my_turtle.seth(0) 
    my_turtle.pendown() 
    my_turtle.circle(r) 

Мы выбираем circle_x значение между -radius_bound и radius_bound, то circle_y значение в пределах, внутри круга

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