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.0b4.tar.gz (111.5 kB view details)

Uploaded Source

Built Distributions

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

Uploaded Python 3

py_ballisticcalc.exts-2.0.0b4-cp312-cp312-win_amd64.whl (175.1 kB view details)

Uploaded CPython 3.12 Windows x86-64

py_ballisticcalc.exts-2.0.0b4-cp312-cp312-macosx_10_9_universal2.whl (251.3 kB view details)

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

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

Uploaded CPython 3.11 Windows x86-64

py_ballisticcalc.exts-2.0.0b4-cp311-cp311-macosx_10_9_universal2.whl (255.2 kB view details)

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

py_ballisticcalc.exts-2.0.0b4-cp310-cp310-win_amd64.whl (177.3 kB view details)

Uploaded CPython 3.10 Windows x86-64

py_ballisticcalc.exts-2.0.0b4-cp310-cp310-macosx_11_0_x86_64.whl (189.3 kB view details)

Uploaded CPython 3.10 macOS 11.0+ x86-64

py_ballisticcalc.exts-2.0.0b4-cp39-cp39-win_amd64.whl (178.0 kB view details)

Uploaded CPython 3.9 Windows x86-64

py_ballisticcalc.exts-2.0.0b4-cp39-cp39-macosx_11_0_x86_64.whl (189.9 kB view details)

Uploaded CPython 3.9 macOS 11.0+ x86-64

File details

Details for the file py_ballisticcalc.exts-2.0.0b4.tar.gz.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b4.tar.gz
Algorithm Hash digest
SHA256 7b172d711412f1fc7680a8d84c3b8fb27083c9e326f15bc34822b73fc1509931
MD5 46d4908feda329257e2a213f381f3e07
BLAKE2b-256 171103d77a04a258c955d4431226675dd3afccec1f1a4e1bfa6aed608e9d1dda

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b4-py3-none-any.whl
Algorithm Hash digest
SHA256 135dda13f4229a07b873d1ca5ce6d410f847714dd5a104f2017a88ef422193e8
MD5 b7148803f9b7d396dfda48612471b0bb
BLAKE2b-256 dcd91ba2ba4cb3bd0cd36eb6ee4b3bed1fee1e490c67907bd05c04b3f087018c

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.0b4-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 7f028518f80d9b21827d8f18b67aecf52b6d585f36e7d657dc85c53454df37b2
MD5 e25c775684f3b8605c06b0cff62ee50b
BLAKE2b-256 a2a3e4fe3d38e6b67f17d59347b59d24a6ad3dc7eb2609f27f27438231682007

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.0b4-cp312-cp312-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b4-cp312-cp312-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 ffd49cd80144515639ae398800d926f9619151d2bea2a86b4e47d303cf0ee529
MD5 0f478dd6d2b4fbe0a99fe3bece15b571
BLAKE2b-256 c9dd47666cab22289066772f864d7d884946fbba1c9014f62a9cbcd995ec7f79

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.0b4-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 eb6e4f37705965bb69aa56bc843915c90a4e18b8680325e16fad0d16a07adeaf
MD5 6413233481b558c2d8a0d06f794c8ee7
BLAKE2b-256 6d1b194f5cbe5464794e7dc240e218629ef96536345129e876a6fa19c7499be8

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.0b4-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b4-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 ff9a968815d3343d23a23f95bcd441c1ad0022d5ef0a99f5da7604934f0fe8ea
MD5 0a5dd31864e6c44aea3c86f2c325282d
BLAKE2b-256 aa5eee083a85fb36d27bfe2cca9f260b7fe5e2f2be60642016f99ab0b17ef7f5

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.0b4-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 335d1fab07a5b12126fc2dc74290a239e59dbca9140652114f2fb7fc29822247
MD5 29d3371c6f78c3a9b1e3af1b6d07e92e
BLAKE2b-256 b817895a74282d23b0a45c28aafde2bfb617962f228e3746f77eacdbdffca4dc

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.0b4-cp310-cp310-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b4-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 046b3384fd464d70c81f0bf77b8892b6bc8723a9cf6033081705d74b69504eee
MD5 41ba04dee3e2e4543f340756a62b345c
BLAKE2b-256 5ff08ced28953ca8be59c714d147d3a72939d9ad397b9dd6e9f19c2166b1fdbb

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.0b4-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b4-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 23d0c4091f36e9039a0efba95e302fc85c12d7cee4f2e5d894fa0a99c03cd249
MD5 a5d4dc0d0a0ff16ca9118d437851a31a
BLAKE2b-256 4565fd53637fc99c813e15e12e03d24a2bcf7b0cbc04261a6cbab050b0b8b63c

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.0b4-cp39-cp39-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b4-cp39-cp39-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 699c7d60a4ff53e3b85f0cfe366943a7e45e06a32055b50b4831f2249a5d89eb
MD5 892722a0d7260ac6ba3cae93ed299cfd
BLAKE2b-256 4b24d6ade129e9a3028777a3342ecabc70fcb5f17e31545e5959270eafd4904b

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