Я написал программу, которая вычисляет и анимирует орбиту плутонов, и начал переписывать ее с помощью классов, потому что это кажется разумным способом введения большего количества планет в симуляцию. У меня есть класс, который определяет физику, а затем загружает данные конкретной планеты, чтобы получить орбитальные данные.Извлечение данных из классов Python
class Planet(object):
m_sun = 1.989*(10**30)
G = 6.67*(10**-11)
dt = 1
coords = []
def __init__(self, x, y, vx, vy, m):
self.x = x
self.y = y
self.vx = vx
self.vy = vy
self.m = m
def genData(self):
while self.dt < 100000000:
r = ((self.x)**2 + (self.y)**2)**0.5
a = ((self.G*self.m_sun)/r**2)
ax = -a*((self.x)/r)
ay = -a*((self.y)/r)
self.vx = self.vx + ax*self.dt
self.vy = self.vy + ay*self.dt
self.x = self.x + self.vx*self.dt
self.y = self.y + self.vy*self.dt
coord = (self.x, self.y)
print coord
self.coords.append(coord)
self.dt = self.dt + 1000
pluto = Planet(4495978707000, 0, 0, 4670, 1.305*(10**22))
pluto.genData()
Я уверен, что он не является совершенным, но это, кажется, работает (это первый класс я построил сам по себе). Мой вопрос заключается в том, как извлечь данные из «коордов» в список, с которым я могу работать вне класса.
Я хочу генерировать данные для каждой планеты, а затем использовать эти данные для создания анимации в Pygame. Например, список координат (x, y) для плутонов, земли, сатурна и т. Д. Как бы то ни было, он отображает данные, но он, похоже, не доступен извне класса.
Надеюсь, мой вопрос имеет смысл.
Спасибо!
Это не связано с вопросом о доступе к данным 'coords', но вы, кажется, используете' self.dt' для двух разных вещей. Вы используете его в вычислительном коде как размер шага времени, но также и в состоянии цикла while в качестве общего истекшего времени. Вероятно, это должны быть отдельные переменные (при этом истекшее время увеличивается по времени, каждый из которых проходит через цикл). – Blckknght
Спасибо, я всегда ценю комментарии о том, как улучшить код. – jm22b
@Blckknght: Yikes! Я этого даже не заметил! Это объясняет сумасшедший выход. :) –