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

Uploaded Source

Built Distributions

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

Uploaded Python 3

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

Uploaded CPython 3.12 Windows x86-64

py_ballisticcalc.exts-2.0.1-cp312-cp312-macosx_10_9_universal2.whl (251.2 kB view details)

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

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

Uploaded CPython 3.11 Windows x86-64

py_ballisticcalc.exts-2.0.1-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.1-cp310-cp310-win_amd64.whl (177.3 kB view details)

Uploaded CPython 3.10 Windows x86-64

py_ballisticcalc.exts-2.0.1-cp310-cp310-macosx_11_0_x86_64.whl (189.2 kB view details)

Uploaded CPython 3.10 macOS 11.0+ x86-64

py_ballisticcalc.exts-2.0.1-cp39-cp39-win_amd64.whl (177.9 kB view details)

Uploaded CPython 3.9 Windows x86-64

py_ballisticcalc.exts-2.0.1-cp39-cp39-macosx_11_0_x86_64.whl (189.8 kB view details)

Uploaded CPython 3.9 macOS 11.0+ x86-64

File details

Details for the file py_ballisticcalc.exts-2.0.1.tar.gz.

File metadata

  • Download URL: py_ballisticcalc.exts-2.0.1.tar.gz
  • Upload date:
  • Size: 111.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.9.19

File hashes

Hashes for py_ballisticcalc.exts-2.0.1.tar.gz
Algorithm Hash digest
SHA256 6d36dd7928b86287d45311c34a200a26dfedafe28a504ef4d63980a7e296c3d1
MD5 33a14c15c5466141abb55c483b9c3478
BLAKE2b-256 f61ce86a7fd020c598c583abba437f9746534978481343ff74daf2fc4970eb2e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 2833081cc940203147f8d0d7f732b30b708e8486a63e2a891704bb555b726d8d
MD5 10348951eb5f0c7f4a224808c9a8bcf2
BLAKE2b-256 9d832b1599798c919538d923607bcae846d15f13966f3e5c911662ab22bfcfb1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 5826d89c1a636f6b80a7b8e8990bb2d2ee4ef50693521ad420d3a07e790c9ff3
MD5 9c51f96eecd2f048c0c40c85c8d02e55
BLAKE2b-256 998e6fedabcc8bd8b79016d8de5e2750e41ec0ecb0e3779405411804c051288d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.1-cp312-cp312-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 d54ee975b31968c9380981dbb85ca468e5da7ef7244af6a330a2b9dd69fe7080
MD5 d83f0131574c339392d78c311e35f17f
BLAKE2b-256 45fd032347c5557682b34509c70f5f693d8fa890fb3216c4157992d558ad29ed

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 72cfb0199a5ed7ef70f64f83bc953a6a046ec09b3b82c906ef6ab88c37714d31
MD5 2c708732f7f2ab43157627a8b4ef7bcd
BLAKE2b-256 ebe9e358dcd9ee28dd91a18b7670822d9c73114dfe415b0817289ace2409bd60

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.1-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 69e6ec91deea082aa98be31c2b547211289713e67c8761f8509127db25c09b7b
MD5 8f8121a2f9385402d67e20e59b4f1678
BLAKE2b-256 d4898fe3aaf9feda94dd9276b04d657f8a48306f18f41ca5c38a963303c2afe8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 28207742285e162675cd18b13d06a792477f2217acbddb306553efd991428832
MD5 2c030c7b23134936f75e68d004a805b8
BLAKE2b-256 375192ff09446dfe16f3373904966fe70d936a0b2d2c86f636559a87170c4eb7

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.1-cp310-cp310-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.1-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 df2ace706a964570cb6aff74877ed0eac67f82e735f45be9feff88ffe81afcf4
MD5 868c17bcfab99f01268f7e3ce0a804a2
BLAKE2b-256 d5818ae12607d5a8988e1e6955a9a278e69077cd8a8de8dddaa2f1b2264df18b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 d39f9ce667204492a12db4ed0af800dff3914c7e3093749eb86338b36b23f5d7
MD5 95d209819be721715529dbf18cc3cbef
BLAKE2b-256 186346d8a2f8eee0c1045dd5815e8c41033bc1732f2fd8188a3482efc7743ddf

See more details on using hashes here.

File details

Details for the file py_ballisticcalc.exts-2.0.1-cp39-cp39-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.1-cp39-cp39-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 95b38367ba9355e215e9b9121377221944d30dade1cf4f3059aa5912d5f70a78
MD5 3d17d6dbf7c1e5edae6342d67b009737
BLAKE2b-256 46eee0d5628758e6f49f4387bdc094807259b0ab3b871f4ffbdab3a0a65bab9c

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