在 Python 海龟圈内绘制随机圈

Drawing random circles within a Python turtle circle

我正在尝试使用 turtle 将一些小圆圈随机放置在一个较大的圆圈中。

大圆的大小取决于是否调用了"small"、"medium"或"large",我需要小圆保持在每个圆的半径范围内圆圈。

    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的倍数。现在我知道你想要随机的圆了,所以你可以修改它来工作你想要的方式。这就是想法。

要确保嵌套圆位于封闭圆内,最好的策略可能是始终 return 到外圆的中心。您应该在 draw_circle 函数中执行此操作。这样你就可以随时知道乌龟在哪里,以及它在不离开封闭圆圈的情况下可以移动多远。

画完外圈(并return到中心),然后可以转一个随机量,确定随机smaller-radius,移动一个从外圆的中心开始随机增加 大半径 - 小半径,绘制较小的圆,return 到外圆的中心,然后重复。

这是执行此操作的一些代码:

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 的圆内,这样小圆就不会超过大圆。

假设您的大圆位于 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 值在圆圈内