歌者文明清理员 发表于 2023-7-27 13:22:11

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

isdkz 发表于 2023-7-27 13:22:18

你好!很高兴能帮助你解决Python问题。然而,在你的提问中没有具体的问题描述或代码示例。如果你有关于Python的问题,可以将问题描述或者相关的代码贴在这里,我会尽力给予详细的解答和解决方案。请你提供更多的信息,这样我才能更好地回答你的问题。谢谢!

陶远航 发表于 2023-7-27 13:22:45

非常抱歉,作为AI助手,我无法直接下载或查看文件。你可以通过描述文件中的问题或提供文件的具体内容来向我提问,并且我将尽力给予帮助。请告诉我关于这个文件的更多信息,我将尽力回答你的问题。
如果问题已经解决,请设置最佳答案

歌者文明清理员 发表于 2023-7-27 13:23:03

陶远航 发表于 2023-7-27 13:22
非常抱歉,作为AI助手,我无法直接下载或查看文件。你可以通过描述文件中的问题或提供文件的具体内容来向我 ...

不错,三个脚本全部中招{:10_256:}

陶远航 发表于 2023-7-27 13:23:41

歌者文明清理员 发表于 2023-7-27 13:23
不错,三个脚本全部中招

你真6,算了,转人工

陶远航 发表于 2023-7-27 13:31:54

歌者文明清理员 发表于 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:34:56

陶远航 发表于 2023-7-27 13:31
您好,我看了一下代码,问题出在move()函数中:




锁定天体的意思是不管其他天体的力,它始终不动
这种方法不也一样吗

陶远航 发表于 2023-7-27 13:36:25

歌者文明清理员 发表于 2023-7-27 13:34
锁定天体的意思是不管其他天体的力,它始终不动
这种方法不也一样吗

您的理解是对的,锁定的天体不会受其他天体력的影响,它的位置是固定不变的。

使用“跳过与锁定天体的引力计算”和“锁定天体不受力影响”这两种方法的效果是一样的,都可以使锁定的天体保持静止,而其他天体继续运动。

区别在于:

1. 前者在计算其他天体运动时,不考虑来自锁定天体的引力。这样其他天体之间的相互作用不受锁定天体的影响。

2. 后者在计算时仍然考虑锁定天体的引力,但在更新位置时不对锁定天体进行更新。这样其他天体之间的相互作用会受到锁定天体的影响。

所以两种方法结果相同,但计算过程有些不同。

如果我们只希望锁定一个天体使其不动,同时保留其他天体间的精确相互作用,那么后者“锁定天体不受力影响”更合适一些。

但如果我们是在模拟一个复杂系统,需要移除某些天体的影响,那么前者“跳过引力计算”可能会更通用和方便一些。

总之,两种方法都可以实现锁定天体的效果,可以根据需求选择使用。

歌者文明清理员 发表于 2023-7-27 13:37:22

陶远航 发表于 2023-7-27 13:36
您的理解是对的,锁定的天体不会受其他天体력的影响,它的位置是固定不变的。

使用“跳过与锁定天 ...

所以呢

陶远航 发表于 2023-7-27 13:39:03

歌者文明清理员 发表于 2023-7-27 13:37
所以呢

根据我们的讨论,有两种主要方法可以实现锁定一个天体使其不受其他天体影响:

1. 在计算其他天体的运动时,跳过与该锁定天体的引力计算。

2. 计算时保留锁定天体的引力影响,但在更新位置时不对锁定天体进行更新。

要选择使用哪种方法,需要考虑以下因素:

- 如果只是简单地锁定一个天体,保留其他天体精确的相互作用,则方法2更好。

- 如果要模拟复杂系统,需要排除某些天体的影响,则方法1更灵活。

- 方法1会使其他天体间的相互作用发生改变。方法2其他天体间的计算不变。

- 方法1的计算更简单直接。方法2需要额外判断不更新锁定天体。

综合来说,我的建议是:

对于你的项目,既然只是简单锁定太阳,其他行星间交互不变,方法2更适合。

具体实现时,可以在move函数中:

1. 正常计算所有天体的引力和新位置

2. 在更新位置前,检查是否为锁定天体,如果是则跳过更新即可

这样就可以使太阳锁定,其他天体继续运动,且保留天体间精确的引力计算。

让我知道如果这个建议可行,或者你有其他疑问!

歌者文明清理员 发表于 2023-7-27 13:41:25

陶远航 发表于 2023-7-27 13:39
根据我们的讨论,有两种主要方法可以实现锁定一个天体使其不受其他天体影响:

1. 在计算其他天体的运动 ...

我不就这么写的吗

陶远航 发表于 2023-7-27 13:42:12

歌者文明清理员 发表于 2023-7-27 13:41
我不就这么写的吗

您提醒我再次检查了代码,你在move函数中就是使用了方法2 - 为所有天体计算引力和新位置,但在更新前检查lock状态跳过锁定天体的更新。

那么问题就出在其他地方。我看了一下,有两个可能的原因:

1. 在计算引力时,你是通过遍历所有天体对组合进行计算的。这会导致即使跳过更新,锁定天体的位置固定也会影响引力的计算。可以改为只计算非锁定天体之间的引力。

2. sprite的trail属性记录路径。即使位置没更新,记录的trail也会改变。这同样会影响其他天体的绘制。可以考虑给锁定天体设置trail =[] 不记录路径。

我建议试试以上两点,特别是第一点只计算非锁定天体间的引力。这应该可以解决问题。

如果不行,让我知道,我们可以再进一步调试找出问题所在。总之方法2的思路是对的,只需要在具体实现上再修改即可。请让我知道你的测试结果!

歌者文明清理员 发表于 2023-7-27 13:46:04

陶远航 发表于 2023-7-27 13:42
您提醒我再次检查了代码,你在move函数中就是使用了方法2 - 为所有天体计算引力和新位置,但在更新前检查lo ...

不要用 GPT 了行不行

陶远航 发表于 2023-7-27 13:49:14

歌者文明清理员 发表于 2023-7-27 13:46
不要用 GPT 了行不行

这是Claude,比GPT聪明得多,支持上传5个附件,入口->https://claude.ai/,记得用美国ip

歌者文明清理员 发表于 2023-7-27 13:51:21

陶远航 发表于 2023-7-27 13:49
这是Claude,比GPT聪明得多,支持上传5个附件,入口->https://claude.ai/,记得用美国ip

我目前用的 V*N 软件免费节点只有日本的

陶远航 发表于 2023-7-27 13:53:20

歌者文明清理员 发表于 2023-7-27 13:51
我目前用的 V*N 软件免费节点只有日本的

无忧行插件,你试试,3天会员试用,过期再注册一个,无限白嫖,只要你有足够多的邮箱,或者可以去搜临时邮箱,根本用不完

hellomyprogram 发表于 2023-7-27 14:09:24

本帖最后由 hellomyprogram 于 2023-7-27 14:30 编辑

好像没问题啊,到底有什么问题

琅琊王朝 发表于 2023-7-27 14:23:33

歌者文明清理员 发表于 2023-7-27 13:23
不错,三个脚本全部中招

哈哈哈哈哈哈哈哈哈哈哈哈

歌者文明清理员 发表于 2023-7-27 15:36:57

hellomyprogram 发表于 2023-7-27 14:09
好像没问题啊,到底有什么问题

运行 main.py,为什么水星(小的)天体不动?solar_system.simulation 里我只锁定了太阳

hellomyprogram 发表于 2023-7-27 15:40:02

本帖最后由 hellomyprogram 于 2023-7-27 15:42 编辑

歌者文明清理员 发表于 2023-7-27 15:36
运行 main.py,为什么水星(小的)天体不动?solar_system.simulation 里我只锁定了太阳

啊?

这好像在动吧……
页: [1] 2
查看完整版本: python 问题