Exemple #1
0
    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)
Exemple #2
0
    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)
Exemple #3
0
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')
Exemple #4
0
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")