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

Uploaded Source

Built Distributions

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

Uploaded Python 3

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

Uploaded CPython 3.12 Windows x86-64

py_ballisticcalc.exts-2.0.2-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.2-cp311-cp311-win_amd64.whl (178.1 kB view details)

Uploaded CPython 3.11 Windows x86-64

py_ballisticcalc.exts-2.0.2-cp311-cp311-macosx_10_9_universal2.whl (247.6 kB view details)

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

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

Uploaded CPython 3.10 Windows x86-64

py_ballisticcalc.exts-2.0.2-cp310-cp310-macosx_10_9_universal2.whl (247.6 kB view details)

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

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

Uploaded CPython 3.9 Windows x86-64

py_ballisticcalc.exts-2.0.2-cp39-cp39-macosx_10_9_universal2.whl (248.9 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.2.tar.gz.

File metadata

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

File hashes

Hashes for py_ballisticcalc_exts-2.0.2.tar.gz
Algorithm Hash digest
SHA256 a72d42fb8594d80e46b25997a5e8fb86e13965cd1faf31037b0fae711324563f
MD5 3f1c147729a64ce1b8f75fed76677859
BLAKE2b-256 2e7e1645bddb87eb8e22e1d8f7d46ad35e99be43e66a49d956905149db0c3071

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 fc4b6636939b6219011d6fa2de8e553fb3e7111f4a54f54d7c1110299a7dc0ab
MD5 42e734bc0bcc49ad9ea2a7a2f8ee1bf1
BLAKE2b-256 7a56751912a86558a6fedb5f3396489a7b12e856533270c26c7ddabd8e6fc998

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ab52df480be840fe2e80a0885aa2db69446e93fb4395b4a17e7c803c5e57b99b
MD5 e4f165b5342a0d2b653438563eda5fa6
BLAKE2b-256 7209583c22da849664d5407da176e742cbbba7545a67e09545f52dde28b56e0a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.2-cp312-cp312-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 39eb84cd0283ae59e169e4f7536f93c5c07f3529a12d549b98d9e3d1d1d230af
MD5 673b74711a6b21dffceec1e451da60e4
BLAKE2b-256 97414290d6cea70c0d68e6e85d1615ac62bbbbd766e8ab111d7fe1926e0597ac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 bd7a9f7c9576c7b778a1b4be545c1b12c31bd6f9ceba0492846d877b5eb7ca4c
MD5 70683acf8e0c1b5b56e6cd7762b26885
BLAKE2b-256 cb21690b3d3ce9d54c5a0de82241ed19571e61008559e9754d4b977741a38322

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.2-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 bcd0a6b52af5ce2797a6c50a2b4f792bafeee38bd645458fa811ec4ece2af6e3
MD5 5173189dfc09eebe5332a5629500d28e
BLAKE2b-256 08ad3e5100d707888b7290cb0e1ac090e74e4a0d49c1594248d47f6a9cb3438e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 97828399921ad35d9ee474464b6b4174017f13762ee77543fca9b2e45826d63d
MD5 a3c436481ce57ca1bf0ab152d87efb03
BLAKE2b-256 0788285d728645fa67759a4076d1b48b411da7946f466b7a6b27890466f6af36

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.2-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 b97dc0b6742f2419e6aeedc6dc715cce562e0d16847a1853823257d09c4a9d73
MD5 c39573a51609ab084998b77341827434
BLAKE2b-256 9bbf7541eb8d56520639419e3b557157597b00837a93845cd6ef0f5bcdcbde5b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 b5a3bb4a6c9ceb2a141cfad51a0904a7ad9d0210647aba747e1e004f0e7592b5
MD5 39c32da6abfefb68c100e47122a59fa7
BLAKE2b-256 f304d3848d4b96cdcae58fbba2200202b4e8702fd441a8cde8c7d867363438c3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for py_ballisticcalc.exts-2.0.2-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 2e39d7402d63b0ea8841fb025dadfa9d8e425badc4478ae776926e10d1de5213
MD5 368df5dd8559c521a58af8d2c3cdb49e
BLAKE2b-256 3c5d574cba556e509a0781e5f4a3f09e3ee25869610acf6b5e32b4226b5c2c0b

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