啊?
这好像在动吧……
?我这好像也动了
似乎是修了一个 bug 这个就自动好了 歌者文明清理员 发表于 2023-7-27 15:45
?我这好像也动了
似乎是修了一个 bug 这个就自动好了
啊这 hellomyprogram 发表于 2023-7-27 15:46
啊这
这个太阳系是真的不稳定……
我看看我看看 我把这个设置成False 或者True 都没见着太阳动啊 hellomyprogram 发表于 2023-7-27 15:46
啊这
另外 itertools.combinations 我这样改就……
def move(t):
sprites_to_delete = []
for sprite1, sprite2 in itertools.combinations(sprites, 2):
x1, y1, vx1, vy1, m1 = sprite1.info
ax1, ay1 = 0, 0
x2, y2, vx2, vy2, m2 = sprite2.info
dx = x2 - x1
dy = y2 - y1
r = get_distance(sprite1, sprite2)
if is_collide(sprite1, sprite2):
heavier = sprite1 if sprite1.mass > sprite2.mass else sprite2
lighter = sprite2 if heavier is sprite1 else sprite1
sprites_to_delete.append(lighter)
heavier.vx += lighter.vx
heavier.vy += lighter.vy
message.text = language["star"]["collide"] % (heavier, lighter)
Thread(target=disappear_message).start()
break
f = G * m1 * m2 / (r ** 2)
if isclose(f, 0):
continue
accel = f / m1
ax1 += accel * (dx / r)
ay1 += accel * (dy / r)
x, y = (
x1 + vx1 * t + 0.5 * ax1 * (t ** 2),
y1 + vy1 * t + 0.5 * ay1 * (t ** 2)
)
tempx, tempy = sprite1.x, sprite1.y
if True:
sprite1.x, sprite1.y = x, y
sprite1.vx = (x - tempx) / t
sprite1.vy = (y - tempy) / t
sprite1.flush()
for sprite in sprites_to_delete:
sprites.remove(sprite)
for sprite in sprites:
sprite.add_to_trail()
本帖最后由 hellomyprogram 于 2023-7-27 16:38 编辑
试试itertools.product(sprites, 2)? hellomyprogram 发表于 2023-7-27 16:33
试试itertools.product?
Traceback (most recent call last):
File "E:\Python123\k\main.py", line 179, in <module>
move(2)
File "E:\Python123\k\main.py", line 71, in move
for sprite1, sprite2 in itertools.product(sprites, 2):
TypeError: 'int' object is not iterable 那itertools.permutations(sprites, 2)? hellomyprogram 发表于 2023-7-27 16:38
那itertools.permutations(sprites, 2)?
是太阳质量不够吗? 能给我一下simulation文件吗 hellomyprogram 发表于 2023-7-27 16:41
是太阳质量不够吗?
够的,如果是原来的嵌套循环的话一切正常 hellomyprogram 发表于 2023-7-27 16:41
能给我一下simulation文件吗
[
# name radius color x y vx vy mass locked
Star("sun", 50, "yellow", 500, 500, 0, 0, 1e4, True),
Star("mercury", 3, "gray", 600, 500, 0, -16, 1),
Star("venus", 4.5, "orange", 630, 500, 0, -15, 1.7),
Star("earth", 5, "blue", 690, 500, 0, -12, 1.7),
Star("mars", 4, "red", 720, 500, 0, -11.5, 1.3)
]
发现这里用itertools的问题了:
使用itertools每两个星球之间就会计算一次距离,而使用嵌套循环要等到一个星球的加速度计算完之后才计算移动的距离,因此itertools算的距离会多数倍。
但是目前我还没有解决办法,建议回滚到上一个使用嵌套循环的版本…… hellomyprogram 发表于 2023-7-27 17:02
发现这里用itertools的问题了:
使用itertools每两个星球之间就会计算一次距离,而使用嵌套循环要等到一个 ...
我还没 commit 呢
页:
1
[2]