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.4rc1.tar.gz (117.4 kB view details)

Uploaded Source

Built Distributions

py_ballisticcalc.exts-2.0.4rc1-py3-none-any.whl (112.4 kB view details)

Uploaded Python 3

py_ballisticcalc.exts-2.0.4rc1-cp312-cp312-win_amd64.whl (176.1 kB view details)

Uploaded CPython 3.12 Windows x86-64

py_ballisticcalc.exts-2.0.4rc1-cp312-cp312-macosx_10_9_universal2.whl (246.5 kB view details)

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

py_ballisticcalc.exts-2.0.4rc1-cp311-cp311-win_amd64.whl (178.8 kB view details)

Uploaded CPython 3.11 Windows x86-64

py_ballisticcalc.exts-2.0.4rc1-cp311-cp311-macosx_10_9_universal2.whl (247.9 kB view details)

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

py_ballisticcalc.exts-2.0.4rc1-cp310-cp310-win_amd64.whl (177.9 kB view details)

Uploaded CPython 3.10 Windows x86-64

py_ballisticcalc.exts-2.0.4rc1-cp310-cp310-macosx_10_9_universal2.whl (247.9 kB view details)

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

py_ballisticcalc.exts-2.0.4rc1-cp39-cp39-win_amd64.whl (178.5 kB view details)

Uploaded CPython 3.9 Windows x86-64

py_ballisticcalc.exts-2.0.4rc1-cp39-cp39-macosx_10_9_universal2.whl (249.3 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.4rc1.tar.gz.

File metadata

File hashes

Hashes for py_ballisticcalc_exts-2.0.4rc1.tar.gz
Algorithm Hash digest
SHA256 cd2588898033d7e653f79f974254831dc98b0061003b7fd2217c51ebb18be147
MD5 363bfb7ac6039b0bafa99655e9db8b41
BLAKE2b-256 69ac14236e7a9d05a689fe74fc35d868c5a942243f95b43bedff26467efd0c47

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.4rc1-py3-none-any.whl
Algorithm Hash digest
SHA256 acbf41fdf67a1567dab1ec256351078b2f25740a3006f36b091058c5e20ce0d5
MD5 4445fe19aab3674e5f0f816b836660bb
BLAKE2b-256 a4864f893a2eba64a1ed4fb34170774fba7b7b6046f521fae6bf626dcdfe90d5

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.4rc1-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.4rc1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 5a4a94458fa27ed035ddcecde5e8e8c23fd9b2dd7d5bf193a56795bd0df36673
MD5 505b85091cc892737e7f3cc8638cdc7e
BLAKE2b-256 7912bef6eb881ea3384858e6e01c71219faae809bfa7a70ec6892eebbfe0b703

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.4rc1-cp312-cp312-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.4rc1-cp312-cp312-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 29cf96a699048bbe1e3de4b9bb65473f1775cef040f7883bce2bcb080e6366b0
MD5 35c8c9c8a7f42ca892a3a62dd5ece667
BLAKE2b-256 cf27a77b6da334c9e3c7a41e327c4e3a319b323a15e141771ff1bfee251defd9

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.4rc1-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.4rc1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 2ea2e40fd434ba79608646607cfa184fc40ecb29e0a567013c3f474978bf2e0c
MD5 6a426e6ea6d55455a0461267d3e2535d
BLAKE2b-256 55060308bb2da44d417423b742c9f33b035f3b11224bf71b31edc9fdc4d42d46

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.4rc1-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.4rc1-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 2f138ea6565236232a4f3d8dd9f19cc27513316c1287e9c45ad149ddfaa88195
MD5 884e3e97ca135687f8dbf7cdacc945da
BLAKE2b-256 3ccbd7d1ec66e9327d49d43d2a6255012a8fe36005b18f7ff5d7124219b7cec4

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.4rc1-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.4rc1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 12fd071f1e9224b3eccbcc16754057a73fc2d586b50fa676797e31b091f4d42a
MD5 6835002cc4441e455e59f6f30f04aa30
BLAKE2b-256 527f95e09223f9d4b2c262534d9077e269f983605f1cf9bbb32fa7384928217b

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.4rc1-cp310-cp310-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.4rc1-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 a553bf75181ca86e05347afd01859b472dfa74fb35203035979179301ea3062e
MD5 a6796a67a64a16f277fd212422545194
BLAKE2b-256 7dc9376cd0c66cfbee8bcc52d57e5a0e7d54c79bef47a497ce789518ead87ea9

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.4rc1-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.4rc1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 c055fc3b94a3e5384fea37cf1a6fe6abedc29d354d005e07eadaf46cb52f2ca3
MD5 3767a5f0e6971ffc95d771f9d24fa822
BLAKE2b-256 39a4c39ed08e10c6a770a70f2fa666caf7d389fd0f5ee306650e63a81eb5493b

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.4rc1-cp39-cp39-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.4rc1-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 258859d05ccb0983496e07ef4e034130797d5aa2c56f50242fd8d940fb947619
MD5 ccec22b9c34b56270e0a5c365f5f8fad
BLAKE2b-256 0e2e1d66ee3eb3e882d1eac93d0ccbe70775e7607bc5d65071b0b153d118fb16

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