def __init__(self, name, mass, radius): self._name = name self._mass = mass self._radius = radius self._position = VectorWithHistory(name, "Position") self._velocity = VectorWithHistory(name, "V") self._force = VectorWithHistory(name, "F") self._acceleration = VectorWithHistory(name, "a") self._isStatic = False self._controller = None # Привязываем гравитационный контроллер GravitySpaceObjectController().attach(self)
class SpaceObject: """Базовый класс космического объекта""" def __init__(self, name, mass, radius): self._name = name self._mass = mass self._radius = radius self._position = VectorWithHistory(name, "Position") self._velocity = VectorWithHistory(name, "V") self._force = VectorWithHistory(name, "F") self._acceleration = VectorWithHistory(name, "a") self._isStatic = False self._controller = None # Привязываем гравитационный контроллер GravitySpaceObjectController().attach(self) @property def name(self): """Название объекта""" return self._name @property def mass(self): """Масса объекта""" return self._mass @mass.setter def mass(self, mass): self._mass = mass @property def radius(self): """Радиус объекта""" return self._radius @property def position(self): """Координаты объекта""" return self._position.value @position.setter def position(self, position): self._position.value = position @property def positionHistory(self): """История изменений координат""" return self._position.history @property def velocity(self): """Скорость""" return self._velocity.value @velocity.setter def velocity(self, velocity): self._velocity.value = velocity @property def velocityHistory(self): """История изменений скорости""" return self._velocity.history @property def acceleration(self): """Ускорение""" return self._acceleration.value @acceleration.setter def acceleration(self, acceleration): self._acceleration.value = acceleration @property def accelerationHistory(self): """История изменений ускорения""" return self._acceleration.history @property def force(self): """Суммарная сила""" return self._force.value @force.setter def force(self, force): self._force.value = force @property def forceHistory(self): """История изменений суммарной силы""" return self._force.history @property def isStatic(self): """Является ли объект статическим""" return self._isStatic @isStatic.setter def isStatic(self, isStatic): self._isStatic = isStatic @property def controller(self): """Контроллер объекта""" return self._controller @controller.setter def controller(self, controller): self._controller = controller def beginStep(self, ctx): """Инициализация шага расчета""" self._controller.beginStep(ctx) def endStep(self, ctx): """Завершение шага расчета""" self._controller.endStep(ctx) if ctx.putIntoHistory: self._position.put(ctx.t) self._velocity.put(ctx.t) self._acceleration.put(ctx.t) self._force.put(ctx.t) def renderStatic(self, plot): """Отрисовка объекта как статического тела""" return renderCircle(plot, self.position, self.radius, fill=True) def renderDynamic(self, plot, index): """Отрисовка объекта как динамического тела в момент времени t[index]""" position = Vector(self._position.history._xs[index], self._position.history._ys[index]) return renderCircle(plot, position, self.radius, name=self.name, color='b')
class SpaceObject: """Базовый класс космического объекта""" def __init__(self, name, mass, radius): self._name = name self._mass = mass self._radius = radius self._position = VectorWithHistory(name, "Position") self._velocity = VectorWithHistory(name, "V") self._force = VectorWithHistory(name, "F") self._acceleration = VectorWithHistory(name, "a") self._isStatic = False self._controller = None # Привязываем гравитационный контроллер GravitySpaceObjectController().attach(self) @property def name(self): """Название объекта""" return self._name @property def mass(self): """Масса объекта""" return self._mass @mass.setter def mass(self, mass): self._mass = mass @property def radius(self): """Радиус объекта""" return self._radius @property def position(self): """Координаты объекта""" return self._position.value @position.setter def position(self, position): self._position.value = position @property def positionHistory(self): """История изменений координат""" return self._position.history @property def velocity(self): """Скорость""" return self._velocity.value @velocity.setter def velocity(self, velocity): self._velocity.value = velocity @property def velocityHistory(self): """История изменений скорости""" return self._velocity.history @property def acceleration(self): """Ускорение""" return self._acceleration.value @acceleration.setter def acceleration(self, acceleration): self._acceleration.value = acceleration @property def accelerationHistory(self): """История изменений ускорения""" return self._acceleration.history @property def force(self): """Суммарная сила""" return self._force.value @force.setter def force(self, force): self._force.value = force @property def forceHistory(self): """История изменений суммарной силы""" return self._force.history @property def isStatic(self): """Является ли объект статическим""" return self._isStatic @isStatic.setter def isStatic(self, isStatic): self._isStatic = isStatic @property def controller(self): """Контроллер объекта""" return self._controller @controller.setter def controller(self, controller): self._controller = controller def beginStep(self, ctx): """Инициализация шага расчета""" self._controller.beginStep(ctx) def endStep(self, ctx): """Завершение шага расчета""" self._controller.endStep(ctx) if ctx.putIntoHistory: self._position.put(ctx.t) self._velocity.put(ctx.t) self._acceleration.put(ctx.t) self._force.put(ctx.t) def renderStatic(self, plot): """Отрисовка объекта как статического тела""" return renderCircle(plot, self.position, self.radius, fill=True) def renderDynamic(self, plot, index): """Отрисовка объекта как динамического тела в момент времени t[index]""" position = Vector(self._position.history._xs[index], self._position.history._ys[index]) return renderCircle(plot, position, self.radius, name=self.name, color="b")