在 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_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)
我们在 -radius_bound
和 radius_bound
之间选择一个 circle_x
值,然后在限制范围内选择一个 circle_y
值在圆圈内
我正在尝试使用 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_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)
我们在 -radius_bound
和 radius_bound
之间选择一个 circle_x
值,然后在限制范围内选择一个 circle_y
值在圆圈内