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())
def apply(self, satellite: Satellite) -> ManeuverCost: satellite.boost(self.delta_v * satellite.vel.norm()) return ManeuverCost(delta_v=self.delta_v)
def apply(self, satellite: Satellite) -> ManeuverCost: satellite.boost(self.delta_v) return ManeuverCost(delta_v=self.delta_v.length())