create static method

Coriolis? create({
  1. double? latitude,
  2. double? azimuth,
  3. required double muzzleVelocityFps,
})

Implementation

static Coriolis? create({
  double? latitude,
  double? azimuth,
  required double muzzleVelocityFps,
}) {
  if (latitude == null) return null;

  final latRad = latitude * (math.pi / 180.0);
  final sinLat = math.sin(latRad);
  final cosLat = math.cos(latRad);

  if (azimuth == null) {
    return Coriolis._(
      sinLat: sinLat,
      cosLat: cosLat,
      muzzleVelocityFps: muzzleVelocityFps,
      flatFireOnly: true,
    );
  }

  final azRad = azimuth * (math.pi / 180.0);
  final sAz = math.sin(azRad);
  final cAz = math.cos(azRad);

  return Coriolis._(
    sinLat: sinLat,
    cosLat: cosLat,
    muzzleVelocityFps: muzzleVelocityFps,
    sinAz: sAz,
    cosAz: cAz,
    rangeEast: sAz,
    rangeNorth: cAz,
    crossEast: cAz,
    crossNorth: -sAz,
    flatFireOnly: false,
  );
}