Skip to main content

High-performance ballistics trajectory engine with professional physics

Project description

ballistics-engine

High-performance ballistics trajectory engine with professional physics modeling.

Features

  • Professional-grade trajectory calculations with multiple drag models (G1, G7, G8)
  • Advanced physics including wind effects and atmospheric modeling
  • Fast Rust implementation with Python bindings via PyO3
  • Imperial units API (grains, fps, yards, inches) with automatic metric conversion

Installation

pip install ballistics-engine

Quick Start

from ballistics_engine import BallisticInputs, TrajectorySolver, WindConditions, AtmosphericConditions, DragModel

# Create ballistic inputs (all imperial units)
inputs = BallisticInputs(
    bc=0.505,                        # G7 BC
    bullet_weight_grains=168,        # grains
    muzzle_velocity_fps=2650,        # feet per second
    bullet_diameter_inches=0.308,    # inches
    bullet_length_inches=1.24,       # inches
    sight_height_inches=1.5,         # inches above bore
    zero_distance_yards=100,         # yards
    twist_rate_inches=11.25,         # inches per turn
)
inputs.drag_model = DragModel.g7()  # Use G7 drag model

# Create wind conditions (optional)
wind = WindConditions(
    speed_mph=10,                    # mph
    direction_degrees=90,            # degrees (0=headwind, 90=from right)
)

# Create atmospheric conditions (optional)
atmosphere = AtmosphericConditions(
    temperature_f=59,                # Fahrenheit
    pressure_inhg=29.92,             # inHg
    humidity_percent=50,             # percent
    altitude_feet=0,                 # feet
)

# Solve trajectory
solver = TrajectorySolver(inputs, wind=wind, atmosphere=atmosphere)
result = solver.solve()

# Print results
print(f"Max range: {result.max_range_yards:.1f} yards")
print(f"Time of flight: {result.time_of_flight:.2f} seconds")
print(f"Impact velocity: {result.impact_velocity_fps:.1f} fps")
print(f"Impact energy: {result.impact_energy_ftlbs:.1f} ft-lbs")

# Iterate through trajectory points
for point in result.points:
    print(f"Time: {point.time:.2f}s, X: {point.x:.1f}yd, Y: {point.y:.3f}yd, V: {point.velocity_fps:.1f}fps")

Units

The Python API uses imperial units for convenience:

  • Mass: grains (gr)
  • Velocity: feet per second (fps)
  • Distance: yards (yd) and inches (in)
  • Pressure: inches of mercury (inHg)
  • Temperature: Fahrenheit (°F)
  • Wind speed: miles per hour (mph)

All conversions to metric (used internally by the Rust engine) are handled automatically.

API Reference

BallisticInputs

Main input parameters for trajectory calculation.

Parameters:

  • bc (float): Ballistic coefficient
  • bullet_weight_grains (float): Bullet mass in grains
  • muzzle_velocity_fps (float): Muzzle velocity in fps
  • bullet_diameter_inches (float): Bullet diameter in inches
  • bullet_length_inches (float): Bullet length in inches
  • sight_height_inches (float): Sight height above bore in inches
  • zero_distance_yards (float): Zero distance in yards
  • shooting_angle_degrees (float): Uphill/downhill angle in degrees
  • twist_rate_inches (float): Barrel twist rate (inches per turn)
  • is_right_twist (bool): True for right-hand twist (default: True)

WindConditions

Wind parameters.

Parameters:

  • speed_mph (float): Wind speed in mph (default: 0)
  • direction_degrees (float): Wind direction in degrees (0=headwind, 90=from right, default: 0)

AtmosphericConditions

Atmospheric parameters.

Parameters:

  • temperature_f (float): Temperature in Fahrenheit (default: 59)
  • pressure_inhg (float): Barometric pressure in inHg (default: 29.92)
  • humidity_percent (float): Relative humidity percentage (default: 50)
  • altitude_feet (float): Altitude in feet (default: 0)

TrajectorySolver

Trajectory calculation engine.

Methods:

  • __init__(inputs, wind=None, atmosphere=None): Create solver with inputs
  • solve(): Calculate trajectory, returns TrajectoryResult

TrajectoryResult

Trajectory calculation results.

Properties:

  • max_range_yards (float): Maximum range in yards
  • max_height_yards (float): Maximum height in yards
  • time_of_flight (float): Total flight time in seconds
  • impact_velocity_fps (float): Impact velocity in fps
  • impact_energy_ftlbs (float): Impact energy in ft-lbs
  • points (list[TrajectoryPoint]): List of trajectory points

TrajectoryPoint

Individual point along trajectory.

Properties:

  • time (float): Time in seconds
  • x (float): Downrange distance in yards
  • y (float): Vertical position in yards (relative to line of sight)
  • z (float): Lateral position in yards
  • velocity_fps (float): Velocity in fps
  • energy_ftlbs (float): Kinetic energy in ft-lbs

DragModel

Drag model selection.

Static methods:

  • DragModel.g1(): G1 drag model (flat base)
  • DragModel.g7(): G7 drag model (boat tail)
  • DragModel.g8(): G8 drag model (boat tail with meplat)

License

Dual licensed under MIT or Apache-2.0.

Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ballistics_engine-0.17.0.tar.gz (21.1 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

ballistics_engine-0.17.0-cp38-abi3-win_amd64.whl (434.7 kB view details)

Uploaded CPython 3.8+Windows x86-64

ballistics_engine-0.17.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (418.7 kB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ x86-64

ballistics_engine-0.17.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (396.2 kB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ ARM64

ballistics_engine-0.17.0-cp38-abi3-macosx_11_0_arm64.whl (409.7 kB view details)

Uploaded CPython 3.8+macOS 11.0+ ARM64

ballistics_engine-0.17.0-cp38-abi3-macosx_10_12_x86_64.whl (429.1 kB view details)

Uploaded CPython 3.8+macOS 10.12+ x86-64

File details

Details for the file ballistics_engine-0.17.0.tar.gz.

File metadata

  • Download URL: ballistics_engine-0.17.0.tar.gz
  • Upload date:
  • Size: 21.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for ballistics_engine-0.17.0.tar.gz
Algorithm Hash digest
SHA256 1b5ba8d097358703ec16a898d5c0f8b598f0eccb9bab8f0701871e4470684645
MD5 c0b5a6eaaa90d99f5d06583d977e6fc5
BLAKE2b-256 e77f623e3abbf6293875264415552ccbfaab63a676809007d1fdc054876867d0

See more details on using hashes here.

File details

Details for the file ballistics_engine-0.17.0-cp38-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for ballistics_engine-0.17.0-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 a2ca790d2f483190829f6681c8909bb6e2f653a17f1c43e757cfc4a827c09113
MD5 985eacf0981af5fbbbc179b38e0ae824
BLAKE2b-256 d5a89118a7a69cf9ad11a25592e7b42cf9eaf81522de70f4fa8cd03935bf7668

See more details on using hashes here.

File details

Details for the file ballistics_engine-0.17.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ballistics_engine-0.17.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f1219495219dc83ace698f3f02969d024d174a5a9945996108202c106beef432
MD5 dc0ff80be6527f9f90a1910c6f8c18ad
BLAKE2b-256 7185b15d2c0ec8329d1d17ec53443d1ef7a074ec293c10ac821bd9e5196ec966

See more details on using hashes here.

File details

Details for the file ballistics_engine-0.17.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ballistics_engine-0.17.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 96585c7f8d65310c7591d600fe41b9c53a361c9430edc0bc50f26a0903c10223
MD5 5338fd81376c89fc701c445c1da48f8f
BLAKE2b-256 425db5c3cc87ccd337868b32ba6727cf92db24fe666ac536f6ac831c6416deb2

See more details on using hashes here.

File details

Details for the file ballistics_engine-0.17.0-cp38-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ballistics_engine-0.17.0-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ed6f237ffda12e29132cd3cb2deb8172116d482e7d8199c7b99868ade577b8d8
MD5 053d7629571cb5895ea410424243e60f
BLAKE2b-256 db08138d137539c4f5e5d33fc93a425c0d66a55a3fecba181a6df81934933786

See more details on using hashes here.

File details

Details for the file ballistics_engine-0.17.0-cp38-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for ballistics_engine-0.17.0-cp38-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c6ea8dd6cc8c81cab1ce576166c88f34de1fc62e6df3a7c8fd958dd548979da4
MD5 a58c8da9a55d215db28fec105b0c4498
BLAKE2b-256 c310d1a218951b56c25fe4ab1318d295cff8e5351aa49b36f305e8ac43066d9f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page