Esempio n. 1
0
 def _applyCore(self, object, ctx):
     # Отделяем часть массы КА
     if not self._separated:
         ctx.log.info(
             'Объект {0} - отделение ступени {1} массой {2}'.format(
                 object.name, self._name, Formatter.mass(self._mass)))
         self._separated = True
         object.mass = object.mass - self._mass
Esempio n. 2
0
 def print(self, screen):
     """Вывод записи в консоль"""
     color = 'WHITE';
     if self._level == SolverLogLevel.err:
         color = 'LRED'
     else: 
         if self._level == SolverLogLevel.trace:
             color = 'DGRAY'
     screen.set_color(fg = terminal.colors[color])
     print ('{0}:   {1}'.format(Formatter.time(self._time), self._message))
Esempio n. 3
0
 def print(self, screen):
     """Вывод записи в консоль"""
     color = 'WHITE'
     if self._level == SolverLogLevel.err:
         color = 'LRED'
     else:
         if self._level == SolverLogLevel.trace:
             color = 'DGRAY'
     screen.set_color(fg=terminal.colors[color])
     print('{0}:   {1}'.format(Formatter.time(self._time), self._message))
Esempio n. 4
0
 def _applyCore(self, object, ctx):
     # Отделяем часть массы КА
     if not self._separated:
         ctx.log.info(
             "Объект {0} - отделение ступени {1} массой {2}".format(
                 object.name, self._name, Formatter.mass(self._mass)
             )
         )
         self._separated = True
         object.mass = object.mass - self._mass
Esempio n. 5
0
    def _runStep(self):
        """Выполнить шаг расчета"""
        for objA in self._objects:
            for objB in self._objects:
                # 1. Объект не влияет сам на себя
                # 2. Объект должен быть подвержен действию сил (втч сил гравитации)
                #    Напр. объект, столкнувшийся с другим, более не подвержен действию внешних сил
                if objA != objB and objA.controller.isAffectedByForces:
                    rVector = objB.position - objA.position
                    distance = rVector.length

                    # расчет коллизий - меньший по массе объект может столкнуться с большим по массе
                    if objA.mass < objB.mass and distance <= objA.radius + objB.radius:
                        # Объект A столкнулся с объектом B
                        CollidedSpaceObjectController(objB,
                                                      -rVector).attach(objA)
                        objA.beginStep(self._ctx)
                        relativeVelocity = (objA.velocity -
                                            objB.velocity).length
                        self._log.err(
                            self._ctx.t,
                            'Объект {0} столкнулся с объектом {1}, скорость столкновения {2}'
                            .format(objA.name, objB.name,
                                    Formatter.speed(relativeVelocity)))
                        continue

                    # расчет гравитации
                    if distance > 0:
                        g = G * objA.mass * objB.mass
                        h = 1. / distance**3
                        force = rVector * g * h
                        self._log.trace(
                            self._ctx.t,
                            'Грав. сила для объекта {0} = {1} | {2}'.format(
                                objA.name, force, force * (1. / objA.mass)))
                        self._log.trace(
                            self._ctx.t,
                            'Сила тяги для объекта  {0} = {1} | {2}'.format(
                                objA.name, objA.force,
                                objA.force * (1. / objA.mass)))
                        objA.force = objA.force + force
Esempio n. 6
0
    def _runStep(self):
        """Выполнить шаг расчета"""
        for objA in self._objects:
            for objB in self._objects:
                # 1. Объект не влияет сам на себя
                # 2. Объект должен быть подвержен действию сил (втч сил гравитации)
                #    Напр. объект, столкнувшийся с другим, более не подвержен действию внешних сил
                if objA != objB and objA.controller.isAffectedByForces:
                    rVector = objB.position - objA.position
                    distance = rVector.length

                    # расчет коллизий - меньший по массе объект может столкнуться с большим по массе
                    if objA.mass < objB.mass and distance <= objA.radius + objB.radius:
                       # Объект A столкнулся с объектом B
                       CollidedSpaceObjectController(objB, -rVector).attach(objA)
                       objA.beginStep(self._ctx)
                       relativeVelocity = (objA.velocity - objB.velocity).length
                       self._log.err(self._ctx.t, 'Объект {0} столкнулся с объектом {1}, скорость столкновения {2}'.format(objA.name, objB.name, Formatter.speed(relativeVelocity)))
                       continue

                    # расчет гравитации
                    if distance > 0:
                        g = G * objA.mass * objB.mass
                        h = 1. / distance**3
                        force = rVector * g * h
                        self._log.trace(self._ctx.t, 'Грав. сила для объекта {0} = {1} | {2}'.format(objA.name, force, force * (1. / objA.mass)))
                        self._log.trace(self._ctx.t, 'Сила тяги для объекта  {0} = {1} | {2}'.format(objA.name, objA.force, objA.force * (1. / objA.mass)))
                        objA.force = objA.force + force
Esempio n. 7
0
 def _onStart(self, object, ctx):
     ctx.log.info('Объект {0} - двигатель включен, тяга {1}'.format(
         object.name, Formatter.force(self._force.length)))
     return
Esempio n. 8
0
 def _onStart(self, object, ctx):
     ctx.log.info(
         "Объект {0} - двигатель включен, тяга {1}".format(object.name, Formatter.force(self._force.length))
     )
     return