Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions docs/api/drag_tables.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
::: pyballistic.drag_tables
options:
show_root_toc_entry: false
show_source: false

::: pyballistic.drag_tables.DragTablePointDictType

----

::: pyballistic.drag_tables.TableG1
options:
show_attribute_values: false

::: pyballistic.drag_tables.TableG2
options:
show_attribute_values: false

::: pyballistic.drag_tables.TableG5
options:
show_attribute_values: false

::: pyballistic.drag_tables.TableG6
options:
show_attribute_values: false

::: pyballistic.drag_tables.TableG7
options:
show_attribute_values: false

::: pyballistic.drag_tables.TableG8
options:
show_attribute_values: false

::: pyballistic.drag_tables.TableGI
options:
show_attribute_values: false

::: pyballistic.drag_tables.TableGS
options:
show_attribute_values: false

::: pyballistic.drag_tables.TableRA4
options:
show_attribute_values: false
113 changes: 75 additions & 38 deletions docs/api/index.md
Original file line number Diff line number Diff line change
@@ -1,38 +1,75 @@
# Overview

This page summarizes the primary classes you’ll use in pyballistic and how they fit together at runtime.

## Core Workflow

- [`Calculator`][pyballistic.interface.Calculator]: High-level entry point to compute trajectories. Accepts a [`Shot`][pyballistic.conditions.Shot] (scene) and returns a [`HitResult`][pyballistic.trajectory_data.HitResult] with trajectory rows and helpers.
- [`Shot`][pyballistic.conditions.Shot]: Details a shooting scenario – [`Ammo`][pyballistic.munition.Ammo], [`Weapon`][pyballistic.munition.Weapon], [`Atmo`][pyballistic.conditions.Atmo], [`Wind`][pyballistic.conditions.Wind], and angles (look/slant, relative, cant). Engines convert `Shot` to `ShotProps`.
- [`ShotProps`][pyballistic.conditions.ShotProps]: Engine-ready scalar form of `Shot` in internal units.
- [`BaseTrajData`][pyballistic.trajectory_data.BaseTrajData]: Minimal, units-free state for dense internal calculations; used to construct `TrajectoryData` via post-processing.
- [`TrajectoryData`][pyballistic.trajectory_data.TrajectoryData]: Detailed characteristics of a point on the ballistic trajectory.
- [`HitResult`][pyballistic.trajectory_data.HitResult]: Wrapper for accessing and displaying calculated results.

## Projectile & Environment

The classes that comprise a [`Shot`][pyballistic.conditions.Shot]:

- [`Atmo`][pyballistic.conditions.Atmo]: Standard or custom atmosphere.
- [`Wind`][pyballistic.conditions.Wind]: Piecewise-constant winds by distance.
- [`Ammo`][pyballistic.munition.Ammo]: Wraps projectile physical details and muzzle velocity, including optional powder temperature sensitivity.
- [`DragModel`][pyballistic.drag_model]: Aerodynamic drag via Ballistic Coefficient and standard drag tables (G1, G7, etc.).
- [`Weapon`][pyballistic.munition.Weapon]: Gun specifications (sight height, rifle twist rate, zero elevation).

## Engines

Calculation engines implement different algorithms for integration and targeting. All inherit from [`BaseIntegrationEngine`][pyballistic.engines.base_engine.BaseIntegrationEngine].


???+ api "Selected API references"

[`pyballistic.interface.Calculator`][pyballistic.interface.Calculator]<br>
[`pyballistic.conditions.Shot`][pyballistic.conditions.Shot]<br>
[`pyballistic.munition.Ammo`][pyballistic.munition.Ammo]<br>
[`pyballistic.conditions.Atmo`][pyballistic.conditions.Atmo]<br>
[`pyballistic.munition.Weapon`][pyballistic.munition.Weapon]<br>
[`pyballistic.trajectory_data.HitResult`][pyballistic.trajectory_data.HitResult]<br>
[`pyballistic.trajectory_data.TrajectoryData`][pyballistic.trajectory_data.TrajectoryData]<br>

# Overview

This page summarizes the primary classes for this project and how they fit together at runtime.

## Core Workflow

- [`Calculator`][pyballistic.interface.Calculator]: High-level entry point to compute trajectories. Accepts a [`Shot`][pyballistic.conditions.Shot] (scene) and returns a [`HitResult`][pyballistic.trajectory_data.HitResult] with trajectory rows and helpers.
- [`Shot`][pyballistic.conditions.Shot]: Details a shooting scenario – [`Ammo`][pyballistic.munition.Ammo], [`Atmo`][pyballistic.conditions.Atmo], [`Weapon`][pyballistic.munition.Weapon], [`Wind`][pyballistic.conditions.Wind], and angles (look/slant, relative, cant).
- [`HitResult`][pyballistic.trajectory_data.HitResult]: Wrapper for accessing and displaying calculated results, including a list of [`TrajectoryData`][pyballistic.trajectory_data.TrajectoryData] (which are detailed characteristics of points on the ballistic trajectory).


## Projectile & Environment
<div style="text-align: center;">

```mermaid
classDiagram
class Shot {
look_angle
relative_angle
}
class Ammo {
mv
temp_modifier
}
class Atmo {
altitude
temperature
pressure
humidity
}
class Wind
class Weapon {
zero_elevation
sight_height
twist
}
class DragModel
class Sight

Shot o-- Ammo
Shot o-- Atmo
Shot o-- "0..n" Wind
Shot o-- "0..1" Weapon
Ammo o-- DragModel
Weapon o-- "0..1" Sight
```
</div>

The classes that comprise a [`Shot`][pyballistic.conditions.Shot]:

- [`Ammo`][pyballistic.munition.Ammo]: Wraps muzzle velocity, including optional powder temperature sensitivity, together with a DragModel.
- [`DragModel`][pyballistic.drag_model]: Physical details of a projectile, including aerodynamic drag as a function of velocity. (Drag is typically modelled via Ballistic Coefficient and standard [drag tables][pyballistic.drag_tables] – G1, G7, etc.)
- [`Atmo`][pyballistic.conditions.Atmo]: Standard or custom atmosphere.
- [`Wind`][pyballistic.conditions.Wind]: Piecewise-constant winds by distance.
- [`Weapon`][pyballistic.munition.Weapon]: Gun specifications (sight height, rifle twist rate, zero elevation, [`Sight`][pyballistic.munition.Weapon] details).

## [Engines](../concepts/engines.md)

Calculation engines implement different algorithms for integration and targeting. All inherit from [`BaseIntegrationEngine`][pyballistic.engines.base_engine.BaseIntegrationEngine].

- [RK4IntegrationEngine][pyballistic.engines.RK4IntegrationEngine]
- [EulerIntegrationEngine][pyballistic.engines.EulerIntegrationEngine]
- [VelocityVerletIntegrationEngine][pyballistic.engines.VelocityVerletIntegrationEngine]
- [SciPyIntegrationEngine][pyballistic.engines.SciPyIntegrationEngine]

???+ api "Selected API references"

[`pyballistic.interface.Calculator`][pyballistic.interface.Calculator]<br>
[`pyballistic.conditions.Shot`][pyballistic.conditions.Shot]<br>
[`pyballistic.munition.Ammo`][pyballistic.munition.Ammo]<br>
[`pyballistic.conditions.Atmo`][pyballistic.conditions.Atmo]<br>
[`pyballistic.munition.Weapon`][pyballistic.munition.Weapon]<br>
[`pyballistic.trajectory_data.HitResult`][pyballistic.trajectory_data.HitResult]<br>
[`pyballistic.trajectory_data.TrajectoryData`][pyballistic.trajectory_data.TrajectoryData]<br>

2 changes: 2 additions & 0 deletions docs/api/trajectory_data.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,5 @@
::: pyballistic.trajectory_data.BaseTrajData

::: pyballistic.trajectory_data.TrajectoryData

::: pyballistic.engines.base_engine.TrajectoryDataFilter
68 changes: 34 additions & 34 deletions docs/api/units/dimensions.md
Original file line number Diff line number Diff line change
@@ -1,34 +1,34 @@
::: pyballistic.unit.Unit
::: pyballistic.unit.GenericDimension
::: pyballistic.unit.counter
::: pyballistic.unit.iterator
::: pyballistic.unit.Angular
::: pyballistic.unit.Distance
::: pyballistic.unit.Energy
::: pyballistic.unit.Pressure
::: pyballistic.unit.Temperature
::: pyballistic.unit.Time
::: pyballistic.unit.Velocity
::: pyballistic.unit.Weight
::: pyballistic.unit.UnitAliases
options:
show_signature: false
separate_signature: false
show_signature_annotations: false
show_attribute_values: false
```python
--8<-- "pyballistic/unit.py:UnitAliases"
```
::: pyballistic.unit.Unit

::: pyballistic.unit.GenericDimension

::: pyballistic.unit.counter

::: pyballistic.unit.iterator

::: pyballistic.unit.Angular

::: pyballistic.unit.Distance

::: pyballistic.unit.Energy

::: pyballistic.unit.Pressure

::: pyballistic.unit.Temperature

::: pyballistic.unit.Time

::: pyballistic.unit.Velocity

::: pyballistic.unit.Weight

::: pyballistic.unit.UnitAliases
options:
show_signature: false
separate_signature: false
show_attribute_values: false
show_signature_annotations: false

```python
--8<-- "pyballistic/unit.py:UnitAliases"
```
Binary file added docs/concepts/DragCurvesBullets.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/concepts/DragModelProjectiles.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
39 changes: 34 additions & 5 deletions docs/concepts/drag_model.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,43 @@
# Drag Models
## Drag Models

???+ api "API Documentation"

[`pyballistic.drag_model`][pyballistic.drag_model]<br>

The drag subsystem models aerodynamic resistance via Ballistic Coefficients referencing standard drag model tables (G1, G7, etc.), or custom Mach–$C_d$ pairs.
The drag subsystem models aerodynamic resistance via Ballistic Coefficients that reference standard drag tables (G1, G7, etc.), or custom Mach–$C_d$ pairs.

- `DragModel`: Single-BC scaling of a reference drag table; optional weight/diameter/length for spin-drift calculations.
- `BCPoint` + `DragModelMultiBC(...)`: Interpolate BC across velocity/Mach to better match measured data.
- Helpers: `make_data_points`, `sectional_density`, `linear_interpolation`.
- [`DragModel`][pyballistic.drag_model.DragModel]: Single-BC scaling of a reference drag table; optional weight/diameter/length for spin-drift calculations.
- [`BCPoint`][pyballistic.drag_model.BCPoint] + [`DragModelMultiBC(...)`][pyballistic.drag_model.DragModelMultiBC]: Interpolate BC across velocity/Mach to better match measured data.
- Helpers: [`make_data_points`][pyballistic.drag_model.make_data_points], [`sectional_density`][pyballistic.drag_model.sectional_density], [`linear_interpolation`][pyballistic.drag_model.linear_interpolation].

Use with `Ammo(dm=DragModel(...))` to parameterize the projectile.

## Standard Models

???+ api "API Documentation"

[`pyballistic.drag_tables`][pyballistic.drag_tables]<br>

### Standard Tables
* [`TableG1`][pyballistic.drag_tables.TableG1]: Flat-base bullet (most common sporting ammunition)
* [`TableG7`][pyballistic.drag_tables.TableG7]: Boat-tail, spitzer (long-range match bullets)
* [`TableG2`][pyballistic.drag_tables.TableG2]: Conical, banded, boat-tail artillery projectile
* [`TableG5`][pyballistic.drag_tables.TableG5]: Round-nose, boat-tail
* [`TableG6`][pyballistic.drag_tables.TableG6]: Flat-base, spire-point
* [`TableG8`][pyballistic.drag_tables.TableG8]: Flat-base, 10 caliber secant ogive
* [`TableGI`][pyballistic.drag_tables.TableGI]: Ingalls G1
* [`TableGS`][pyballistic.drag_tables.TableGS]: 9/16" smooth sphere
* [`TableRA4`][pyballistic.drag_tables.TableRA4]: .22LR 40gr

----

### Standard Projectile Profiles

![Standard Projectiles](DragModelProjectiles.jpg)

----

### Standard Drag Curves

![Standard ballistic drag curves](DragCurvesBullets.png)

Loading
Loading