Esempio n. 1
0
    def apply(self, satellite: Satellite) -> ManeuverCost:
        # We want to rotate around the radial vector. Use Rodrigues.
        axis = satellite.pos.norm()
        vel = satellite.vel
        cos = math.cos(self.angle)
        sin = math.sin(self.angle)

        new_vel = vel * cos + axis.cross(vel) * sin + axis * axis.dot(vel) * (
            1 - cos)

        delta_v = new_vel - vel
        satellite.boost(delta_v)
        return ManeuverCost(delta_v=delta_v.length())
Esempio n. 2
0
 def apply(self, satellite: Satellite) -> ManeuverCost:
     satellite.boost(self.delta_v * satellite.vel.norm())
     return ManeuverCost(delta_v=self.delta_v)
Esempio n. 3
0
 def apply(self, satellite: Satellite) -> ManeuverCost:
     satellite.boost(self.delta_v)
     return ManeuverCost(delta_v=self.delta_v.length())