如何修改Python代码实现随机分布且随机半径的圆形绘制?
修改代码实现随机分布且随机半径的圆形绘制
原问题
现有代码可绘制随机分布但半径大小一致的圆形,需要修改为能绘制随机分布且随机半径大小的圆形。原代码如下:
from random import randint from svg_turtle import SvgTurtle import turtle from turtle import Turtle import xml.etree.ElementTree as ET import json def x_circle(x, width, height): x_r=30 x_num = 100 cursor_size = 20 x.hideturtle() x.screen.bgcolor("black") x.color("white") x.shape("circle") x.shapesize(x_r / cursor_size) x.speed("fastest") x.penup() xs = [] for _ in range(x_num): xx = x.clone() xx.setposition( randint(-width / 2, width / 2), randint(-height / 2, height / 2), ) while any((a.distance(xx) < x_r for a in xs)): xx.setposition( xx(- width / 2, width / 2 ), # 此处存在语法错误,应为randint调用 randint(- height / 2, height / 2), ) x.stamp() # 错误:应使用克隆的xx对象盖章,否则位置不对应 xs.append(xx)
修改方案
要实现随机半径,需从固定半径变量、个体半径设置、碰撞检测逻辑三个核心部分调整,同时修复原代码的语法错误:
- 生成随机半径:移除固定的
x_r,在每个圆的循环中生成自定义范围的随机半径 - 为每个克隆乌龟设置对应半径:每个
xx对象需根据自身随机半径调整shapesize参数 - 修正碰撞检测逻辑:两圆不重叠的条件是中心距离≥两半径之和,因此碰撞判断需比较距离与两半径之和的大小
- 修复原代码错误:修正
setposition的语法错误、调整stamp的调用对象
修改后的完整代码
from random import randint from svg_turtle import SvgTurtle import turtle from turtle import Turtle import xml.etree.ElementTree as ET import json def x_circle(x, width, height): x_num = 100 cursor_size = 20 x.hideturtle() x.screen.bgcolor("black") x.color("white") x.shape("circle") x.speed("fastest") x.penup() xs = [] radii = [] # 存储每个圆的半径,与xs中的乌龟对象一一对应 for _ in range(x_num): # 生成随机半径,范围可自行调整(示例为5到50) r = randint(5, 50) xx = x.clone() # 根据当前半径设置乌龟显示大小 xx.shapesize(r / cursor_size) # 设置随机初始位置 xx.setposition( randint(-width / 2, width / 2), randint(-height / 2, height / 2), ) # 碰撞检测:确保当前圆与已存在的圆不重叠 while any(xx.distance(a) < r + radii[i] for i, a in enumerate(xs)): xx.setposition( randint(-width / 2, width / 2), randint(-height / 2, height / 2), ) # 使用当前克隆的乌龟对象盖章 xx.stamp() xs.append(xx) radii.append(r)
关键说明
- 新增
radii列表存储每个圆的半径,与xs列表中的乌龟对象一一对应,方便碰撞检测时获取对应半径值 - 碰撞检测条件
xx.distance(a) < r + radii[i]确保两圆中心距离大于等于半径之和,避免重叠 - 每个克隆乌龟单独设置
shapesize,保证显示的圆形大小与随机半径匹配 - 修复了原代码中
setposition的语法错误和stamp对象错误,确保每个圆的位置正确
内容的提问来源于stack exchange,提问作者user20442423
相关产品推荐
相关产品推荐

