Orbit-Simulator icon indicating copy to clipboard operation
Orbit-Simulator copied to clipboard

Exception when a very small planet is attracted by a large one and has a considerable speed

Open iker-sr opened this issue 3 months ago • 0 comments

Exception Details

Traceback (most recent call last):
  File "C:\Users\iker\Downloads\Orbit-Simulator-master\Orbit-Simulator-master\main.py", line 259, in <module>
    planet.update()
  File "C:\Users\iker\Downloads\Orbit-Simulator-master\Orbit-Simulator-master\main.py", line 76, in update
    Particle(
  File "C:\Users\iker\Downloads\Orbit-Simulator-master\Orbit-Simulator-master\main.py", line 179, in __init__
    self.radius = random.randint(min_radius, max_radius)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\iker\AppData\Local\Programs\Python\Python312\Lib\random.py", line 336, in randint
    return self.randrange(a, b+1)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\iker\AppData\Local\Programs\Python\Python312\Lib\random.py", line 319, in randrange
    raise ValueError(f"empty range in randrange({start}, {stop})")
ValueError: empty range in randrange(1, 1)

Steps to reproduce

  1. Create a big planet
  2. Create a small planet far from the big one (try to make the click as short as possible)

Possible Solutions

Solution 1

in planet.update(), replace:

            particles.append(
                Particle(
                    self.x,
                    self.y,
                    [np.subtract(self.color, (35, 35, 35))],
                    1,
                    int(-self.velocity[0]),
                    1,
                    int(-self.velocity[1]),
                    1,
                    int(self.radius / 1.5),
                    0.4,
                    0,
                )
            )

with

            particles.append(
                Particle(
                    self.x,
                    self.y,
                    [np.subtract(self.color, (35, 35, 35))],
                    1,
                    int(-self.velocity[0]),
                    1,
                    int(-self.velocity[1]),
                    1,
                    max(1, int(self.radius / 1.5)),
                    0.4,
                    0,
                )
            )

Solution 2

in particle.__init__(), replace:

self.radius = random.randint(min_radius, max_radius)

with

self.radius = random.randint(min(min_radius, max_radius), max(min_radius, max_radius))

iker-sr avatar Nov 08 '25 20:11 iker-sr