Python太阳系随机生成代码如何在轨道弧上随机放置行星位置
问题原因
你当前的代码存在两个核心问题导致行星位置异常:
- 通过三角函数计算得到的
xcoord、ycoord是相对于坐标原点(0,0)的轨道半径偏移量,但你的轨道实际绘制中心是(width/2, sun_center),直接拿偏移量作为绘制坐标,所有行星都会集中在画布左上角的第一象限区域,看起来像堆在同一位置。 - 预生成圆周点数组的方式冗余且有采样精度限制,直接通过随机角度计算坐标效率更高、灵活性更强。
解决方案
直接替换你现有获取行星坐标的逻辑即可,不需要保留points_on_circum函数:
import random import math # 轨道参数和draw_orbit传入的参数保持一致 orbit_center_x = width / 2 orbit_center_y = sun_center orbit_radius = height - next_center - border_size # 生成0到2π的随机角度,对应整圆轨道任意位置 random_angle = random.uniform(0, 2 * math.pi) # 计算相对轨道中心的偏移量 x_offset = math.cos(random_angle) * orbit_radius y_offset = math.sin(random_angle) * orbit_radius # 叠加轨道中心坐标得到实际绘制位置 planet_x = orbit_center_x + x_offset planet_y = orbit_center_y + y_offset # 绘制行星 draw_circle_fill(cr, planet_x, planet_y, next_size, r, g, b)
如果需要限定行星只出现在第一象限,只需把随机角度的范围修改为random.uniform(0, math.pi/2)即可。
如果要保留你原有points_on_circum的实现,只需在取到随机偏移量后叠加轨道中心坐标即可:
placement = random.choice(points_on_circum(arc)) planet_x = width/2 + placement[0] planet_y = sun_center + placement[1] draw_circle_fill(cr, planet_x, planet_y, next_size, r, g, b)
内容的提问来源于stack exchange,提问作者deitz88
相关产品推荐
相关产品推荐

