python 问题
本帖最后由 歌者文明清理员 于 2023-8-2 17:22 编辑bug 又莫名其妙的好了
你好!有什么需要帮助你的吗?
https://img1.imgtp.com/2023/07/27/Im6XKdBY.png
https://img1.imgtp.com/2023/07/27/skDCSg8K.png
你好!很高兴能帮助你解决Python问题。然而,在你的提问中没有具体的问题描述或代码示例。如果你有关于Python的问题,可以将问题描述或者相关的代码贴在这里,我会尽力给予详细的解答和解决方案。请你提供更多的信息,这样我才能更好地回答你的问题。谢谢! 非常抱歉,作为AI助手,我无法直接下载或查看文件。你可以通过描述文件中的问题或提供文件的具体内容来向我提问,并且我将尽力给予帮助。请告诉我关于这个文件的更多信息,我将尽力回答你的问题。
如果问题已经解决,请设置最佳答案 陶远航 发表于 2023-7-27 13:22
非常抱歉,作为AI助手,我无法直接下载或查看文件。你可以通过描述文件中的问题或提供文件的具体内容来向我 ...
不错,三个脚本全部中招{:10_256:} 歌者文明清理员 发表于 2023-7-27 13:23
不错,三个脚本全部中招
你真6,算了,转人工 歌者文明清理员 发表于 2023-7-27 13:23
不错,三个脚本全部中招
您好,我看了一下代码,问题出在move()函数中:
def move(t):
...
for sprite1 in sprites:
...
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 not sprite1.locked:
sprite1.x, sprite1.y = x, y
...
move()函数会遍历所有天体sprite,并根据公式计算出它的新位置x,y。
然后如果该天体不处于locked锁定状态,就会将它的位置更新为计算出的新位置。
问题就是,即使太阳sprite被锁定了,但其他天体的位置计算还是会受到太阳的影响(通过计算引力ax,ay)。这样当太阳位置不变,其他天体也就会停止移动。
解决方案是,在计算其他天体的引力时,需要判断是否与锁定的太阳发生作用,如果是就跳过不计算它对其他天体的引力影响。
例如可以这么修改:
def move(t):
for sprite1 in sprites:
if sprite1.locked:
continue
ax1, ay1 = 0, 0
for sprite2 in sprites:
if sprite2.locked:
continue
# 其他天体间计算引力
...
这就跳过了与锁定天体的引力计算,使其他天体可以继续运动。
半人工,求最佳 陶远航 发表于 2023-7-27 13:31
您好,我看了一下代码,问题出在move()函数中:
锁定天体的意思是不管其他天体的力,它始终不动
这种方法不也一样吗 歌者文明清理员 发表于 2023-7-27 13:34
锁定天体的意思是不管其他天体的力,它始终不动
这种方法不也一样吗
您的理解是对的,锁定的天体不会受其他天体력的影响,它的位置是固定不变的。
使用“跳过与锁定天体的引力计算”和“锁定天体不受力影响”这两种方法的效果是一样的,都可以使锁定的天体保持静止,而其他天体继续运动。
区别在于:
1. 前者在计算其他天体运动时,不考虑来自锁定天体的引力。这样其他天体之间的相互作用不受锁定天体的影响。
2. 后者在计算时仍然考虑锁定天体的引力,但在更新位置时不对锁定天体进行更新。这样其他天体之间的相互作用会受到锁定天体的影响。
所以两种方法结果相同,但计算过程有些不同。
如果我们只希望锁定一个天体使其不动,同时保留其他天体间的精确相互作用,那么后者“锁定天体不受力影响”更合适一些。
但如果我们是在模拟一个复杂系统,需要移除某些天体的影响,那么前者“跳过引力计算”可能会更通用和方便一些。
总之,两种方法都可以实现锁定天体的效果,可以根据需求选择使用。 陶远航 发表于 2023-7-27 13:36
您的理解是对的,锁定的天体不会受其他天体력的影响,它的位置是固定不变的。
使用“跳过与锁定天 ...
所以呢 歌者文明清理员 发表于 2023-7-27 13:37
所以呢
根据我们的讨论,有两种主要方法可以实现锁定一个天体使其不受其他天体影响:
1. 在计算其他天体的运动时,跳过与该锁定天体的引力计算。
2. 计算时保留锁定天体的引力影响,但在更新位置时不对锁定天体进行更新。
要选择使用哪种方法,需要考虑以下因素:
- 如果只是简单地锁定一个天体,保留其他天体精确的相互作用,则方法2更好。
- 如果要模拟复杂系统,需要排除某些天体的影响,则方法1更灵活。
- 方法1会使其他天体间的相互作用发生改变。方法2其他天体间的计算不变。
- 方法1的计算更简单直接。方法2需要额外判断不更新锁定天体。
综合来说,我的建议是:
对于你的项目,既然只是简单锁定太阳,其他行星间交互不变,方法2更适合。
具体实现时,可以在move函数中:
1. 正常计算所有天体的引力和新位置
2. 在更新位置前,检查是否为锁定天体,如果是则跳过更新即可
这样就可以使太阳锁定,其他天体继续运动,且保留天体间精确的引力计算。
让我知道如果这个建议可行,或者你有其他疑问! 陶远航 发表于 2023-7-27 13:39
根据我们的讨论,有两种主要方法可以实现锁定一个天体使其不受其他天体影响:
1. 在计算其他天体的运动 ...
我不就这么写的吗 歌者文明清理员 发表于 2023-7-27 13:41
我不就这么写的吗
您提醒我再次检查了代码,你在move函数中就是使用了方法2 - 为所有天体计算引力和新位置,但在更新前检查lock状态跳过锁定天体的更新。
那么问题就出在其他地方。我看了一下,有两个可能的原因:
1. 在计算引力时,你是通过遍历所有天体对组合进行计算的。这会导致即使跳过更新,锁定天体的位置固定也会影响引力的计算。可以改为只计算非锁定天体之间的引力。
2. sprite的trail属性记录路径。即使位置没更新,记录的trail也会改变。这同样会影响其他天体的绘制。可以考虑给锁定天体设置trail =[] 不记录路径。
我建议试试以上两点,特别是第一点只计算非锁定天体间的引力。这应该可以解决问题。
如果不行,让我知道,我们可以再进一步调试找出问题所在。总之方法2的思路是对的,只需要在具体实现上再修改即可。请让我知道你的测试结果! 陶远航 发表于 2023-7-27 13:42
您提醒我再次检查了代码,你在move函数中就是使用了方法2 - 为所有天体计算引力和新位置,但在更新前检查lo ...
不要用 GPT 了行不行 歌者文明清理员 发表于 2023-7-27 13:46
不要用 GPT 了行不行
这是Claude,比GPT聪明得多,支持上传5个附件,入口->https://claude.ai/,记得用美国ip 陶远航 发表于 2023-7-27 13:49
这是Claude,比GPT聪明得多,支持上传5个附件,入口->https://claude.ai/,记得用美国ip
我目前用的 V*N 软件免费节点只有日本的 歌者文明清理员 发表于 2023-7-27 13:51
我目前用的 V*N 软件免费节点只有日本的
无忧行插件,你试试,3天会员试用,过期再注册一个,无限白嫖,只要你有足够多的邮箱,或者可以去搜临时邮箱,根本用不完 本帖最后由 hellomyprogram 于 2023-7-27 14:30 编辑
好像没问题啊,到底有什么问题 歌者文明清理员 发表于 2023-7-27 13:23
不错,三个脚本全部中招
哈哈哈哈哈哈哈哈哈哈哈哈 hellomyprogram 发表于 2023-7-27 14:09
好像没问题啊,到底有什么问题
运行 main.py,为什么水星(小的)天体不动?solar_system.simulation 里我只锁定了太阳 本帖最后由 hellomyprogram 于 2023-7-27 15:42 编辑
歌者文明清理员 发表于 2023-7-27 15:36
运行 main.py,为什么水星(小的)天体不动?solar_system.simulation 里我只锁定了太阳
啊?
这好像在动吧……
页:
[1]
2