Module moog.physics.constant_speed
Constant speed corrective physics.
The ConstantSpeed class is a physics object that forces sprites in specified layers to have constant speed. It is typically used as a corrective physics.
Classes
class ConstantSpeed (layer_names, speed)-
Expand source code
class ConstantSpeed(abstract_physics.AbstractPhysics): """Constant speed physics class. Forces sprites in specified layers to have constant speed by normalizing their velocities. """ def __init__(self, layer_names, speed): """Constructor. Args: layer_names: String or iterable of strings corresponding to layers in environment state. All sprites in these layers will have speed equal to `speed` argument. speed: Float. Sprite velocities will be normalized to have norm equal to this (or zero if their velocity is zero). """ if not isinstance(layer_names, (list, tuple)): layer_names = [layer_names] self._layer_names = layer_names self._speed = speed def apply_physics(self, state, updates_per_env_step): """Apply the physics. Args: state: Environment state. updates_per_env_step: Int. Number of times the physics is applied per environment step. """ sprites = [s for k in self._layer_names for s in state[k]] for s in sprites: norm_velocity = np.linalg.norm(s.velocity) if norm_velocity: s.velocity = self._speed * s.velocity / norm_velocityConstant speed physics class.
Forces sprites in specified layers to have constant speed by normalizing their velocities.
Constructor.
Args
layer_names- String or iterable of strings corresponding to layers
in environment state. All sprites in these layers will have
speed equal to
speedargument. speed- Float. Sprite velocities will be normalized to have norm equal to this (or zero if their velocity is zero).
Ancestors
- AbstractPhysics
- abc.ABC
Methods
def apply_physics(self, state, updates_per_env_step)-
Expand source code
def apply_physics(self, state, updates_per_env_step): """Apply the physics. Args: state: Environment state. updates_per_env_step: Int. Number of times the physics is applied per environment step. """ sprites = [s for k in self._layer_names for s in state[k]] for s in sprites: norm_velocity = np.linalg.norm(s.velocity) if norm_velocity: s.velocity = self._speed * s.velocity / norm_velocityApply the physics.
Args
state- Environment state.
updates_per_env_step- Int. Number of times the physics is applied per environment step.
Inherited members