В настоящее время я пытаюсь разработать масштабную модель вселенной с использованием pygame. В настоящий момент, когда я вычисляю x, y положения планет относительно Солнца, планеты медленно падают к Солнцу, несмотря на то, что используются только уравнения для положения, основанные на расстоянии и угле pl anet (нет force).
Вот фрагмент кода для вычисления расстояния от данной звезды в настоящее время:
def d_obj(self, reference):
x_diff_sq = pow(self.x - reference.pos[0], 2)
y_diff_sq = pow(self.y - reference.pos[1], 2)
return pow(x_diff_sq + y_diff_sq, 0.5)
И затем я передаю то, что эта функция возвращает в следующую функцию для вычисления положения
def move(self, d):
self.theta += self.d_theta
self.x = int(d * math.cos(self.theta)) + total_d/2
self.y = int(d * math.sin(self.theta)) + total_d/2
total_d / 2 - это смещение координат, а self.d_theta - период вращения для заданного pl anet.
Каждый pl anet имеет жестко заданную начальную позицию и Я использую это, чтобы вычислить разницу между начальным расстоянием и текущим расстоянием для всех планет, для каждого тика очевидно, что pl anet движется примерно на 1 км к Солнцу. Можно ли как-то попытаться компенсировать это?
Я понимаю, что в масштабе вещей, где я рисую вещи в миллионах километров, мне просто любопытно, какая часть этих уравнений вызывает Ошибка. Я пытался использовать оператор «**» над pow и после некоторых онлайн-исследований обнаружил, что pow лучше использовать для операций с числами с плавающей точкой.
Следует также упомянуть, что все расчеты даны в километрах, затем перед рисованием радиус планет и x, y отображаются на экране с установленного расстояния, которое в настоящее время составляет около 4 а.е.