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 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 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))

# units comparison:
# supports operators like < > <= >= == !=
Distance.Meter(100) == Distance.Centimeter(100)  # >>> False, compare two 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 as Set

# Modify default units
Set.Units.velocity = Velocity.FPS
Set.Units.temperature = Temperature.Celsius
Set.Units.distance = Distance.Meter
Set.Units.sight_height = Distance.Centimeter

Set.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 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.0b2.tar.gz (201.9 kB view details)

Uploaded Source

Built Distributions

py_ballisticcalc.exts-2.0.0b2-py3-none-any.whl (207.3 kB view details)

Uploaded Python 3

py_ballisticcalc.exts-2.0.0b2-cp312-cp312-win_amd64.whl (319.5 kB view details)

Uploaded CPython 3.12 Windows x86-64

py_ballisticcalc.exts-2.0.0b2-cp312-cp312-macosx_10_9_universal2.whl (450.5 kB view details)

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

py_ballisticcalc.exts-2.0.0b2-cp311-cp311-win_amd64.whl (322.7 kB view details)

Uploaded CPython 3.11 Windows x86-64

py_ballisticcalc.exts-2.0.0b2-cp311-cp311-macosx_10_9_universal2.whl (455.5 kB view details)

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

py_ballisticcalc.exts-2.0.0b2-cp310-cp310-win_amd64.whl (322.1 kB view details)

Uploaded CPython 3.10 Windows x86-64

py_ballisticcalc.exts-2.0.0b2-cp310-cp310-macosx_11_0_x86_64.whl (338.5 kB view details)

Uploaded CPython 3.10 macOS 11.0+ x86-64

py_ballisticcalc.exts-2.0.0b2-cp39-cp39-win_amd64.whl (322.8 kB view details)

Uploaded CPython 3.9 Windows x86-64

py_ballisticcalc.exts-2.0.0b2-cp39-cp39-macosx_11_0_x86_64.whl (339.4 kB view details)

Uploaded CPython 3.9 macOS 11.0+ x86-64

File details

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

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b2.tar.gz
Algorithm Hash digest
SHA256 051e634c3914d5722437f18786c8031fc72b13943ab53505e272791ea9e1c10a
MD5 87e6b44e75cdf9ead7844336bdfc1b9d
BLAKE2b-256 e17e6d93a2ce5deaf875d2d97bd81017b7d9c33921361d00cd2101106604a8a4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b2-py3-none-any.whl
Algorithm Hash digest
SHA256 7b7e61e6cc004ab09fbac0ae849c4f88cd7f1187a32866f608b33a7f322fa7f6
MD5 e2ec069afe8cb52d06978d50bc980b88
BLAKE2b-256 2fa57f4e362f881576e3dbb70f6fbf8c483018f6454da34cab95d1ff4acda6c8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a7933feb5a85d61764db058fc1e9750507b78f1d1b0da0cb077f1ff3a90c02b5
MD5 1b9c2c5c923cf2b96b3b9f9abdc83be4
BLAKE2b-256 8312dc6ebc3723d4d65b8cadc37fc3096e67f6721d8f0160f905fb571568d418

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b2-cp312-cp312-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 be814b8d31fb28b36659e06974e7d949af5465427fda882d6a74795a7c0b63ac
MD5 9532692aa91fc0c28b4b4f044e846fe1
BLAKE2b-256 3a6ae4a09c65bebf3599659247594fcc5c0519d92a1c5925131af5703a615924

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 1ca0573ba42b662d75d36b7838bc484511cc096bd475cc688ab3af89ebc16274
MD5 ec26133487f6c8ed4519eb0485733922
BLAKE2b-256 c5bede3d57d39e4a3652a89e9648f5122ea7cf53f0d3b7368ae71ea58355a0d8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b2-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 49f088f6305f077b4ceb15dddad010ec5e5e594d4c568f19e170bcdfedbae160
MD5 0e0f9e6cd1e88da4ecaa5dc813c4939c
BLAKE2b-256 5179c24b60bdb101aa7bce93e230169243e670078e7f33fc35704d4590852883

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 d01362fb03191b5fe720f75e524ed9e593bc44aa8405bbe1e09dbb2816b85602
MD5 dbc5a4f47c6844ebae8759b90940d2d5
BLAKE2b-256 62bbf2555cd8d0e7247112b49d1a94b39960dfd8975cbfa770e45b142db1f330

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b2-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 ee5e41dc5c91d4c58e01a611164f8c0a72e645c0ce3254fa455744888df761e5
MD5 4023a240251031b541a7d5321c4a1f40
BLAKE2b-256 3a7e0c619651bc39fc560966daf4dd2c375807ec6316e2cb55ecf74c6a4ae0dc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 0669e8bcf082f0b652c87742ae8a5ad57b90c2cb3702725ef6a4f320bc72b5c6
MD5 700e1c9553a6dd0870972193e3cfe263
BLAKE2b-256 aa54321dad89ea72da6f9c99d97c07203bf08b49c8f9aea7ffdf345ee46baf6e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.0b2-cp39-cp39-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 b571152c41ba7df505a5b27af644f5671101a8ded83ad92b9f79a72fe319dfef
MD5 9976a288e4015eb5e589193d4438b827
BLAKE2b-256 77a5fdd35db14903cbe9c0ca91952764d01fe2e5c62aa2407477da776b06a359

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