java.lang.Object
ca.team4308.absolutelib.math.trajectories.physics.AirResistance

public class AirResistance extends Object
Models air resistance (drag) for projectile motion. Implements both simple drag and Magnus effect for spinning balls.
  • Constructor Details

    • AirResistance

      public AirResistance()
      Creates air resistance model with default parameters.
    • AirResistance

      public AirResistance(boolean enabled, double airDensity, double dragCoefficient, boolean includeMagnusEffect)
      Creates air resistance model with custom parameters.
      Parameters:
      enabled - Whether air resistance is enabled
      airDensity - Air density in kg/m^3
      dragCoefficient - Drag coefficient (Cd)
      includeMagnusEffect - Whether to include Magnus effect for spinning balls
  • Method Details

    • disabled

      public static AirResistance disabled()
      Creates disabled air resistance model (vacuum conditions).
      Returns:
      AirResistance instance with drag disabled
    • indoorFRC

      public static AirResistance indoorFRC()
      Creates air resistance model optimized for indoor FRC competition.
      Returns:
      AirResistance instance for indoor FRC
    • withMagnus

      public static AirResistance withMagnus()
      Creates air resistance model with Magnus effect for backspin shots.
      Returns:
      AirResistance instance with Magnus effect enabled
    • calculateDragForce

      public double[] calculateDragForce(GamePiece gamePiece, double vx, double vy, double vz)
      Calculates the drag force vector on the projectile.
      Parameters:
      gamePiece - The game piece being shot
      vx - Velocity in X direction (m/s)
      vy - Velocity in Y direction (m/s)
      vz - Velocity in Z direction (m/s)
      Returns:
      Array of [Fx, Fy, Fz] drag forces in Newtons
    • calculateDragAcceleration

      public double[] calculateDragAcceleration(GamePiece gamePiece, double vx, double vy, double vz)
      Calculates drag acceleration on the projectile.
      Parameters:
      gamePiece - The game piece
      vx - Velocity X (m/s)
      vy - Velocity Y (m/s)
      vz - Velocity Z (m/s)
      Returns:
      Array of [ax, ay, az] drag accelerations in m/s^2
    • calculateMagnusForce

      public double[] calculateMagnusForce(GamePiece gamePiece, double vx, double vy, double vz, double spinRpm, double spinAxisX, double spinAxisY, double spinAxisZ)
      Calculates Magnus force for a spinning ball. The Magnus effect causes lift perpendicular to both velocity and spin axis.
      Parameters:
      gamePiece - The game piece
      vx - Velocity X (m/s)
      vy - Velocity Y (m/s)
      vz - Velocity Z (m/s)
      spinRpm - Spin rate in RPM (positive = backspin)
      spinAxisX - X component of spin axis (normalized)
      spinAxisY - Y component of spin axis (normalized)
      spinAxisZ - Z component of spin axis (normalized)
      Returns:
      Array of [Fx, Fy, Fz] Magnus forces in Newtons
    • calculateTerminalVelocity

      public double calculateTerminalVelocity(GamePiece gamePiece)
      Returns the terminal velocity for a given game piece.
      Parameters:
      gamePiece - The game piece
      Returns:
      Terminal velocity in m/s
    • isEnabled

      public boolean isEnabled()
      Returns whether air resistance is enabled.
      Returns:
      true if enabled
    • getAirDensity

      public double getAirDensity()
      Returns the air density used in the model.
      Returns:
      air density in kg/m^3
    • getDragCoefficient

      public double getDragCoefficient()
      Returns the drag coefficient used in the model.
      Returns:
      drag coefficient (Cd)
    • isMagnusEffectEnabled

      public boolean isMagnusEffectEnabled()
      Returns whether Magnus effect is enabled.
      Returns:
      true if Magnus effect is included