在Python turtle圆内绘制随机圆

在Python turtle圆内绘制随机圆,python,random,turtle-graphics,Python,Random,Turtle Graphics,我试着用turtle在一个大圆圈内随机放置一些小圆圈 大圆的大小取决于是称为“小”、“中”还是“大”,我需要小圆保持在每个圆的半径范围内 def drawCircle(myTurtle, radius): circumference = 2 * 3.1415 * radius sideLength = circumference / 360 drawPolygon(myTurtle,sideLength,360) 如何使用“随机”将半径较

我试着用turtle在一个大圆圈内随机放置一些小圆圈

大圆的大小取决于是称为“小”、“中”还是“大”,我需要小圆保持在每个圆的半径范围内

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

如何使用“随机”将半径较小的圆放置在初始圆内

你可以试试这样的东西

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的倍数。现在我知道你们想要的是随机圈,所以你们可以修改它,使其按照你们想要的方式工作。不过,这是一个想法。

为了确保嵌套圆保持在封闭圆内,最好的策略可能是始终返回到外圆的中心。您应该在
draw\u 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()
例如:


假设较大的圆具有半径
R
,较小的圆具有半径
R
。这意味着小圆的圆心必须在半径为R-R的圆内,这样小圆就不会超过大圆


假设较大的圆位于
圆x
圆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
代码:

我们在
-radius\u-bound
radius\u-bound
之间选择一个
圆x
值,然后在圆内的限制范围内选择一个
圆y

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)