Skip to main content

LGPL library for small arms ballistic calculations (Python 3)

Project description

BallisticCalculator

LGPL library for small arms ballistic calculations (Python 3.9+)

Table of contents

Installation

Latest stable release from pypi**

pip install py-ballisticcalc

# Using precompiled backend (improves performance)
pip install py-ballisticcalc[exts]

# Using matplotlib and pandas uses additional dependencies
pip install py-ballisticcalc[charts]

Using matplotlib and pandas uses additional dependencies

pip install py-ballisticcalc[charts]

Installing from sources

MSVC or GCC required

  • Download and install MSVC or GCC depending on target platform
  • Use one of the references you need:
# no binary from PyPi
pip install py-ballisticcalc==<version> --no-binary py-ballisticcalc

# master brunch
pip install git+https://github.com/o-murphy/py_ballisticcalc

# specific branch
pip install git+https://github.com/o-murphy/py_ballisticcalc.git@<target_branch_name>

Usage

The library supports all the popular units of measurement, and adds different built-in methods to define and manipulate it

Unit manipulation syntax:

from py_ballisticcalc.unit import *

# ways to define value in prefer_units
# 1. old syntax
unit_in_meter = Distance(100, Distance.Meter)
# 2. short syntax by Unit type class
unit_in_meter = Distance.Meter(100)
# 3. by Unit enum class
unit_in_meter = Unit.Meter(100)

# >>> <Distance>: 100.0 m (3937.0078740157483)

# convert unit
# 1. by method
unit_in_yard = unit_in_meter.convert(Distance.Yard)
# 2. using shift syntax
unit_in_yards = unit_in_meter << Distance.Yard  # '<<=' operator also supports
# >>> <Distance>: 109.36132983377078 yd (3937.0078740157483)

# get value in specified prefer_units
# 1. by method
value_in_km = unit_in_yards.get_in(Distance.Kilometer)
# 2. by shift syntax
value_in_km = unit_in_yards >> Distance.Kilometer  # '>>=' operator also supports
# >>> 0.1

# getting unit raw value:
rvalue = Distance.Meter(10).raw_value
rvalue = float(Distance.Meter(10))

# prefer_units comparison:
# supports operators like < > <= >= == !=
Distance.Meter(100) == Distance.Centimeter(100)  # >>> False, compare two prefer_units by raw value
Distance.Meter(100) > 10  # >>> True, compare unit with float by raw value

An example of calculations

from py_ballisticcalc import *
from py_ballisticcalc import Settings, PreferredUnits

# Modify default prefer_units
PreferredUnits.velocity = Velocity.FPS
PreferredUnits.temperature = Temperature.Celsius
PreferredUnits.distance = Distance.Meter
PreferredUnits.sight_height = Distance.Centimeter

Settings.USE_POWDER_SENSITIVITY = True  # Correct muzzle velocity for powder temperature

# Define ammunition parameters
weight, diameter = 168, 0.308  # Numbers will be assumed to use default Settings.Units
length = Distance.Inch(1.282)  # Or declare prefer_units explicitly
dm = DragModel(0.223, TableG7, weight, diameter, length)
ammo = Ammo(dm, 2750, 15)
ammo.calc_powder_sens(2723, 0)
gun = Weapon(sight_height=9, twist=12)
current_atmo = Atmo(110, 29.8, 15, 72)
current_winds = [Wind(2, 90)]
shot = Shot(weapon=gun, ammo=ammo, atmo=current_atmo, winds=current_winds)
calc = Calculator()
calc.set_weapon_zero(shot, Distance.Meter(100))

shot_result = calc.fire(shot, trajectory_range=1000, trajectory_step=100)

for p in shot_result:
    print(p.formatted())

Example of the formatted output:

python -m py_ballisticcalc.example
('0.000 s', '0.0 m', '2750.0 ft/s', '2.46 mach', '-3.5 inch', '-3.5 inch', '0.00 mil', '0.0 inch', '0.00 mil', '0.0 m', '0.0939 °', '-4.062e-03', '0.000', '2821 ft·lb', '880 lb', 8)
('0.125 s', '100.1 m', '2526.5 ft/s', '2.26 mach', '0.0 inch', '0.0 inch', '0.00 mil', '0.2 inch', '0.05 mil', '100.1 m', '0.0068 °', '-4.062e-03', '0.665', '2381 ft·lb', '683 lb', 9)
('0.260 s', '200.0 m', '2313.5 ft/s', '2.07 mach', '-3.0 inch', '-3.0 inch', '-0.39 mil', '0.8 inch', '0.10 mil', '200.0 m', '-0.0967 °', '-4.062e-03', '0.633', '1996 ft·lb', '524 lb', 8)
('0.409 s', '300.1 m', '2111.2 ft/s', '1.89 mach', '-13.8 inch', '-13.8 inch', '-1.19 mil', '1.9 inch', '0.16 mil', '300.1 m', '-0.2207 °', '-4.062e-03', '0.599', '1663 ft·lb', '398 lb', 8)
('0.572 s', '400.1 m', '1919.6 ft/s', '1.72 mach', '-33.9 inch', '-33.9 inch', '-2.19 mil', '3.5 inch', '0.22 mil', '400.1 m', '-0.3701 °', '-4.062e-03', '0.570', '1374 ft·lb', '299 lb', 8)
('0.751 s', '500.0 m', '1736.8 ft/s', '1.56 mach', '-65.4 inch', '-65.4 inch', '-3.38 mil', '5.7 inch', '0.30 mil', '500.0 m', '-0.5516 °', '-4.062e-03', '0.545', '1125 ft·lb', '222 lb', 8)
('0.951 s', '600.1 m', '1561.9 ft/s', '1.40 mach', '-110.7 inch', '-110.7 inch', '-4.77 mil', '8.7 inch', '0.37 mil', '600.1 m', '-0.7748 °', '-4.062e-03', '0.521', '910 ft·lb', '161 lb', 8)
('1.173 s', '700.0 m', '1395.2 ft/s', '1.25 mach', '-173.1 inch', '-173.1 inch', '-6.40 mil', '12.6 inch', '0.47 mil', '700.0 m', '-1.0525 °', '-4.062e-03', '0.495', '726 ft·lb', '115 lb', 8)
('1.423 s', '800.0 m', '1238.1 ft/s', '1.11 mach', '-257.0 inch', '-257.0 inch', '-8.31 mil', '17.6 inch', '0.57 mil', '800.0 m', '-1.4030 °', '-4.062e-03', '0.462', '572 ft·lb', '80 lb', 8)
('1.705 s', '900.1 m', '1097.8 ft/s', '0.98 mach', '-368.2 inch', '-368.2 inch', '-10.58 mil', '24.1 inch', '0.69 mil', '900.1 m', '-1.8503 °', '-9.633e-03', '0.333', '450 ft·lb', '56 lb', 8)

Contributors

This project exists thanks to all the people who contribute.

Special thanks to:

  • David Bookstaber - Ballistics Expert, Financial Engineer
    For the help in understanding and improvement of some calculation methods
  • Nikolay Gekht
    For the sources code on C# and GO-lang from which this project firstly was forked from

About project

The library provides trajectory calculation for projectiles including for various applications, including air rifles, bows, firearms, artillery and so on.

3DF model that is used in this calculator is rooted in old C sources of version 2 of the public version of JBM calculator, ported to C#, optimized, fixed and extended with elements described in Litz's "Applied Ballistics" book and from the friendly project of Alexandre Trofimov and then ported to Go.

Now it's also ported to python3 and expanded to support calculation trajectory by multiple ballistics coefficients and using custom drag data (such as Doppler radar data ©Lapua, etc.)

The online version of Go documentation is located here: https://godoc.org/github.com/gehtsoft-usa/go_ballisticcalc

C# version of the package is located here: https://github.com/gehtsoft-usa/BallisticCalculator1

The online version of C# API documentation is located here: https://gehtsoft-usa.github.io/BallisticCalculator/web-content.html

Go documentation can be obtained using godoc tool.

The current status of the project is ALPHA version.

RISK NOTICE

The library performs very limited simulation of a complex physical process and so it performs a lot of approximations. Therefore, the calculation results MUST NOT be considered as completely and reliably reflecting actual behavior or characteristics of projectiles. While these results may be used for educational purpose, they must NOT be considered as reliable for the areas where incorrect calculation may cause making a wrong decision, financial harm, or can put a human life at risk.

THE CODE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.

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

py_ballisticcalc_exts-2.0.3.tar.gz (111.5 kB view details)

Uploaded Source

Built Distributions

py_ballisticcalc.exts-2.0.3-py3-none-any.whl (111.6 kB view details)

Uploaded Python 3

py_ballisticcalc.exts-2.0.3-cp312-cp312-win_amd64.whl (175.3 kB view details)

Uploaded CPython 3.12 Windows x86-64

py_ballisticcalc.exts-2.0.3-cp312-cp312-macosx_10_9_universal2.whl (246.2 kB view details)

Uploaded CPython 3.12 macOS 10.9+ universal2 (ARM64, x86-64)

py_ballisticcalc.exts-2.0.3-cp311-cp311-win_amd64.whl (178.1 kB view details)

Uploaded CPython 3.11 Windows x86-64

py_ballisticcalc.exts-2.0.3-cp311-cp311-macosx_10_9_universal2.whl (247.4 kB view details)

Uploaded CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)

py_ballisticcalc.exts-2.0.3-cp310-cp310-win_amd64.whl (177.2 kB view details)

Uploaded CPython 3.10 Windows x86-64

py_ballisticcalc.exts-2.0.3-cp310-cp310-macosx_10_9_universal2.whl (247.5 kB view details)

Uploaded CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)

py_ballisticcalc.exts-2.0.3-cp39-cp39-win_amd64.whl (177.8 kB view details)

Uploaded CPython 3.9 Windows x86-64

py_ballisticcalc.exts-2.0.3-cp39-cp39-macosx_10_9_universal2.whl (248.7 kB view details)

Uploaded CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64)

File details

Details for the file py_ballisticcalc_exts-2.0.3.tar.gz.

File metadata

  • Download URL: py_ballisticcalc_exts-2.0.3.tar.gz
  • Upload date:
  • Size: 111.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.4

File hashes

Hashes for py_ballisticcalc_exts-2.0.3.tar.gz
Algorithm Hash digest
SHA256 1c0c3f345e697e977290a5753a731536f7a7df6edf66e203c6b9f354a07c8fd5
MD5 6d2c15c6e764ae782f8cd8ba5c558405
BLAKE2b-256 9ec642569f75c1327002d7aab8d73809dbaca6184a811c5856f8880b8c22b82e

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 b7226df5f9d07abbbf86fc0fcd7940eb0ed762eb70c95dd16c916b2978993daf
MD5 d996d50279513ab632587f7ade19a9dc
BLAKE2b-256 efadbafcd4802cd133aed90be832bd9794c532422f6f931917626785ebe069d4

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.3-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a7fe052ed2ba7b9eed3f99470ff43ee97c2482a7147588b7519b6bb6c410f567
MD5 b4a9e47e7ebf8ea073e2c5ed2c5d0816
BLAKE2b-256 e74077931c4e8aceb0b7a52cbc109ebe3998128c4207d06dccc208cd662a1a4a

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.3-cp312-cp312-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.3-cp312-cp312-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 0be47cc0df4da75cd65d5e1d38d5767ff8e281b6afd87c6b08b7d7909d846a36
MD5 95bf250dd8b17fb7ac6fc2a0612d4265
BLAKE2b-256 39bcd57ba8ca41afe89cb35860bd3397eca582c8788ce613717b6f35cbf30066

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.3-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 986193f4a18d9bfe77b6aa5757dc877b40359a6742d2014b24f283fa9c05277e
MD5 501fd7f70aa7abb7e9ffd5ab2e27837a
BLAKE2b-256 b2dcc1900d1df1477ed38762594853148b113e7523e7ce3f90fe4c203d192f50

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.3-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.3-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 816573504dc887fc1a0e6ac60763a49df21ffafbd41bd565a4c105f8acb6d1d3
MD5 0659efde2d2b21e02c3c500ddb07461e
BLAKE2b-256 72252d75f4264cccf9d4d04f034895037fb00bd58a5d6b09b7f2d57454c96d56

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.3-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 942d1d6358887e195fa588fe8fb6addb2d400d855455e80e6f660a32242a7b1a
MD5 8e69e7ac33fb084eaa7ee5757a9f1fb3
BLAKE2b-256 a62b99c912042d9d4e0da2221864062c08a83f72a1fbaeba724350c00697d0f2

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.3-cp310-cp310-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.3-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 4d328ba1159f4f4e7225bcbc7e1b2baf5f9720cb9c25b56db0d7ce30333c2237
MD5 336504d499853df8d66d9507e2c69a56
BLAKE2b-256 60e34bc16328e173ea10b5f41e4ff474e384494995287527f479bcbb3a3a0d1e

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.3-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.3-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 b60218ef55b8cf6b7cc25035104ca82ddee091e9cdb63be3be642b397b873d48
MD5 5547d6409cb22e2e954cdf25a7dad083
BLAKE2b-256 aa4fbe928e1fc0ece7db0509b7cabc3006e2771dc36f3c24cf273c42e95acec8

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.3-cp39-cp39-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.3-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 7cbcfedfd431d49aaaeb46099fcb5c8dd4486edf8a0da2ce411664ceacc152e3
MD5 72404b7fa8ce49eab77b9b78714d0d33
BLAKE2b-256 268ebd408a0729e0055e393ebc3e0d0fc55e7d4ca94e90a5fb401b6cd20072c4

See more details on using hashes here.

Supported by

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