在Python乌龟圈内绘制随机圆圈

时间:2015-04-26 15:56:17

标签: python random turtle-graphics

我正在尝试使用乌龟在一个更大的圆圈中随机放置一些小圆圈。

较大圆的大小取决于是否调用“小”,“中”或“大”,我需要小圆圈保持在每个圆的半径范围内。

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

如何使用随机在初始圆圈内放置半径较小的圆圈?

3 个答案:

答案 0 :(得分:0)

你可以试试这样的事情

show binlog events ...

我绘制一个圆圈,重置位置并再次绘制,这个代码的唯一捕获是周长是10的倍数。现在我知道你想要的随机圆圈,所以你可以修改这个以使你的方式工作想。这是个主意。

答案 1 :(得分: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

答案 2 :(得分: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)

我们在circle_x-radius_bound之间选择radius_bound值,然后在限制范围内的circle_y值位于圈内