While working on my ballistics book I got sidetracked building a ballistic calculator. I wanted to programmatically generate some examples, so 6 months ago I went to see what was available in open source. As I have noted previously, Python is preferred for this sort of hacking. I found this recently active Python project that looked promising and began to play with it. I encountered some bugs, noted them on GitHub, and was soon collaborating with the Ukrainian developer behind the project. Since then I have sporadically worked on adding features and improving the code in my fork here. These became quite extensive, and today we merged all of my work into his repository as a version 2 release!
One valuable feature set I added was to clearly handle non-zero look angles – i.e., when the shooter is sighting above or below the horizon. All useful ballistic calculators accept look angle as an optional parameter, but none that I have seen make it clear in their output if/when their distance and drop values are relative to the sight line or to the horizon.
Technical details: The calculator simulates a ballistic trajectory using standard aerodynamic drag models together with a point-mass model of motion, sometimes referred to as 3 degree-of-freedom (3 DoF). It incorporates atmospheric variables, including multiple wind readings, as well as models of the change in air density by altitude over a trajectory. It adds Litz’s spin-drift approximation to windage, so I like to call it 3DoF+ since spin is another degree of freedom. (I don’t claim 4 degrees of freedom because the spin isn’t fully modelled. Amusingly, Hornady published a calculator under the trademark 4DOF® even though theirs likewise provides only auxiliary approximations of spin effects.)