2015-04-26 174 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_xcircle_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) 

我們挑選-radius_boundradius_bound之間的circle_x值,然後限度內circle_y值爲圈內