You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python太阳系随机生成代码如何在轨道弧上随机放置行星位置

问题原因

你当前的代码存在两个核心问题导致行星位置异常:

  1. 通过三角函数计算得到的xcoord、ycoord是相对于坐标原点(0,0)的轨道半径偏移量,但你的轨道实际绘制中心是(width/2, sun_center),直接拿偏移量作为绘制坐标,所有行星都会集中在画布左上角的第一象限区域,看起来像堆在同一位置。
  2. 预生成圆周点数组的方式冗余且有采样精度限制,直接通过随机角度计算坐标效率更高、灵活性更强。

解决方案

直接替换你现有获取行星坐标的逻辑即可,不需要保留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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 16:18:01