Ballistic solvers, for those that use them.

Stubbers

Member
Mar 18, 2023
2,613
2,883
41
Colorado
Not sure when or even if I'll make my new ballistic solver public, as most people already have their preference, but wanted to show off the work I put in this last week developing one that uses G1, GA, GA2, RA4, SLG0, SLG1, WC0, G7, and some other drag references, while also receiving input on what could or should be added if its not present already. Its a common 3DOF(+) ballistic solver using Euler's method to calculate drag. Nothing too fancy, was/is mostly a challenge to myself and to help myself understand some of the dynamics going on externally with projectiles during flight, all this and I have barely scratched the surface. The math involved for advanced ballistics is...certainly beyond me...but hey, don't let that set you back, I certainly didn't let it to me.


Below are a few screenshots, left side shows no effects added, while the right side shows all effects added, Spin drift, Magnus effect, Earth based effects which include Coriolis and Eotvos effect, and even the wind being included in zero, a feature I figured would hurt to add that I don't see currently in ballistic solvers. These effects are near meaningless under 200 yards, but really present themselves, more-so with airguns, once pushed beyond.

No added effects vs added effects

1728345030082.png
1728345046936.png


Spin drift, Earth based and Magnus effects=.09 / .32 mil at 150 yards = .5" and 1.75" difference, while not a lot, it grows rather quickly as you increase range, which airgunners are frequently doing as technology evolves. .08 of the .32 was the wind being zeroed, still 1.3" with that effect taken out.

The other cool feature is visually showing the vertical stringing. The FPS variance above is 50, and you can see on the reticle, horizontal lines that show where your high and low shots could wander to assuming your fps input used is in the middle. At 50 fps spread you could see upwards of 7" of vertical stringing in the above setup. 50 fps spread was used to show the extreme, as no one in their right mind will shoot 150 yards with a gun that has 50 fps spread, at least not out of enjoyment.


VS 20 fps spread which is calculated to cause roughly 2.6" vertical stringing. (Not shown, 5 fps is .6" vertical spread, at this distance with this setup, and 10 fps is 1.3")

1728343380532.png
1728343391789.png


Another neat feature is automatically updating weather that effects your shot. Each component from Temp, humidity, wind speed and wind direction can be set to auto or inputted manually. Its wild to see the effects here in Colorado as the temperature goes from 40F in the morning to 90F in the afternoon. Quite the shift in POA required.

Here is 40F vs 90F:


1728344164497.png
1728344306898.png


.52 mil + .23 mil which is quite a shift, and that assumes your gun isn't shooting at a greatly reduced fps in the cold, which it likely is, which would add even more drop.

If you have ideas / features that should be included, feel free to chime in! Happy shooting.

-Matt
 

Attachments

  • 1728344984033.png
    1728344984033.png
    130 KB · Views: 3
  • 1728344990064.png
    1728344990064.png
    130 KB · Views: 5
Wow a lot of work has gone into that. Would love to be able to play around with the file if you can share it?

It's currently 90-95% complete, and the last 5-10% will take quite a bit of effort and time. Due to it being google sheets, it's a bit slow with how much calculation is going on, which takes place on the cloud vs locally on your pc or phone. A straight pc or phone app is near instant, where as the sheet is 3-6 seconds, even longer if it has to recalculate the zero angle. I personally don't need solvers in the heat of the moment, I use them to study, so the speed is non-issue to me.

I may add the pellet database from ham for bc's and known pellet lengths ect if I decide to release it.

I want it to be feature rich while maintaining a minimalistic UI that doesn't overwhelm.

The chart is easy to change between the following.
1728395676754.png


I may add MOA, currently only MOA is shown here:

1728395930939.png
1728405407366.png
1728405415509.png


And unfortunately it'll never have the option to select different reticles unless you did your own tweaking. The current reticle is at transparent overlay of the reticle I use, placed on top of a graph that displays your dope based on this reticle design/size, so altering that would take some know-how, and definitely wouldn't be 'moa' compatible as is.

And I have no desire to develop a full blown mobile app for both android and iphone. So while the release of this sheet is likely inevitable one day, it'll certainly be limited in who it can please, but...I built it for me.

-Matt
 
Last edited:
"I may add MOA, currently only MOA is shown here:"
I thought that I was looking at MRAD??
Confused....

Mike

You are looking at MRAD...only MOA was shown in the above picture if you selected MOA unit... I already updated to show MOA everywhere upon selection, so there is no confusion...


MOA vs MRAD: (the reticle still shows mrad units on the reticle itself, won't be updating to MOA reticle)

1728405317992.png
1728786606042.png



*edit, had the conversion from MOA to MIL backwards, frankly not my area of interest atm to consider MOA but its done.*

-Matt
 
Last edited:
  • Like
Reactions: dgeesaman
Few more feature mentions.

1728405655583.png


These can be changed to display the following:


1728405931222.png


More ideas welcome, always interested in expanding on presentable data that has value.

I personally find projectile flight revs interesting, which is the total revolutions your projectile sees from muzzle to target. Likewise I find ideal twist rate quite helpful in many scenarios. SG, for those that don't know, is stability factor, which I should rename to just that.


-Matt
 
**Changed the orientation for U/D and L/R shown here:

After / Before

1728412302453.png
1728412360173.png


I was using U for shots that you would have to aim above 0 on the reticle opposed to referencing the clicks, frankly I like how I had it, but its not how current solvers do it so I might as well join the crowd.




Few comparisons between Sterlok Pro, Chairgun and what My solver currently produces for various slopes. Mine is more in line with other advanced solvers that account for negative and positive slope correctly.


Shot info: 34 gr at 876 FPS, .045 bc, 10 yard zero, 2 inch scope height, 4 mph wind at 7 oclock, 68F, 25% humidity, 24.8 "hg


Sterlok and Chairgun using GA, My solver using GA and GA2 *edit even added MERO GA/GA for comparison*


200 yards: 0 slope


  • Sterlok GA = U 12 / L 1.7 (No Spin Drift)
  • Sterlok GA = U 12 / L 1.2 (With Spin Drift)
  • Chairgun GA = U 11.89 / L 1.62 (No Spin Drift?)
  • My Solver GA = U 11.88 / L 1.76 (No Spin Drift)
  • My Solver GA = U 11.88 / L 1.5 (With Spin Drift)
  • My Solver GA2 = U 11.44 / L 1.62 (No Spin drift)
  • My Solver GA2 = U 11.44 / L 1.37 (With Spin Drift)
  • Mero GA = U 11.88 / L 1.86 (No Spin Drift)
  • Mero GA2 = U 11.44 / L 1.71 (No Spin Drift)
200 yards +15 slope
  • Sterlok GA = U 11.4 / L 1.7 (No Spin Drift)
  • Sterlok GA = U 11.4 / L 1.2 (With Spin Drift)
  • Chairgun GA = U 11.48 / L 1.62 (No Spin Drift?)
  • My Solver GA = U 11.4 / L 1.8 (No Spin Drift)
  • My Solver GA = U 11.4 / L 1.54 (With Spin Drift)
  • My Solver GA2 = U 10.98 / L 1.65 (No Spin drift)
  • My Solver GA2 = U 10.98 / L 1.4 (With Spin Drift)
  • Mero GA = U 11.24 / L 1.84 (No Spin Drift)
  • Mero GA2 = U 10.85 / L 1.71 (No Spin Drift)
200 yards -15 slope
  • Sterlok GA = U 11.4 / L 1.7 (No Spin Drift)
  • Sterlok GA = U 11.4 / L 1.2 (With Spin Drift)
  • Chairgun GA = U 11.48 / L 1.62 (No Spin Drift?)
  • My Solver GA = U 11.13 / L 1.72 (No Spin Drift)
  • My Solver GA = U 11.13 / L 1.46 (With Spin Drift)
  • My Solver GA2 = U 10.72 / L 1.58 (No Spin drift)
  • My Solver GA2 = U 10.712/ L 1.33 (With Spin Drift)
  • Mero GA = U 11.24 / L 1.84 (No Spin Drift)
  • Mero GA2 = U 10.85 / L 1.71 (No Spin Drift)
 
Last edited:
Not sure when or even if I'll make my new ballistic solver public, as most people already have their preference, but wanted to show off the work I put in this last week developing one that uses G1, GA, GA2, RA4, SLG0, SLG1, WC0, G7, and some other drag references, while also receiving input on what could or should be added if its not present already. Its a common 3DOF(+) ballistic solver using Euler's method to calculate drag. Nothing too fancy, was/is mostly a challenge to myself and to help myself understand some of the dynamics going on externally with projectiles during flight, all this and I have barely scratched the surface. The math involved for advanced ballistics is...certainly beyond me...but hey, don't let that set you back, I certainly didn't let it to me.


Below are a few screenshots, left side shows no effects added, while the right side shows all effects added, Spin drift, Magnus effect, Earth based effects which include Coriolis and Eotvos effect, and even the wind being included in zero, a feature I figured would hurt to add that I don't see currently in ballistic solvers. These effects are near meaningless under 200 yards, but really present themselves, more-so with airguns, once pushed beyond.

No added effects vs added effects

View attachment 502623View attachment 502624

Spin drift, Earth based and Magnus effects=.09 / .32 mil at 150 yards = .5" and 1.75" difference, while not a lot, it grows rather quickly as you increase range, which airgunners are frequently doing as technology evolves. .08 of the .32 was the wind being zeroed, still 1.3" with that effect taken out.

The other cool feature is visually showing the vertical stringing. The FPS variance above is 50, and you can see on the reticle, horizontal lines that show where your high and low shots could wander to assuming your fps input used is in the middle. At 50 fps spread you could see upwards of 7" of vertical stringing in the above setup. 50 fps spread was used to show the extreme, as no one in their right mind will shoot 150 yards with a gun that has 50 fps spread, at least not out of enjoyment.


VS 20 fps spread which is calculated to cause roughly 2.6" vertical stringing. (Not shown, 5 fps is .6" vertical spread, at this distance with this setup, and 10 fps is 1.3")

View attachment 502609View attachment 502610

Another neat feature is automatically updating weather that effects your shot. Each component from Temp, humidity, wind speed and wind direction can be set to auto or inputted manually. Its wild to see the effects here in Colorado as the temperature goes from 40F in the morning to 90F in the afternoon. Quite the shift in POA required.

Here is 40F vs 90F:


View attachment 502611View attachment 502617

.52 mil + .23 mil which is quite a shift, and that assumes your gun isn't shooting at a greatly reduced fps in the cold, which it likely is, which would add even more drop.

If you have ideas / features that should be included, feel free to chime in! Happy shooting.

-Matt
I’ve been using strelock pro and chairgun elite but only at the surface level as I shoot field target 10-55 yards mostly.
That said this is still very impressive!
 
Super cool.

I don’t have data but I know it happens: ballistic coefficient variation. A percentage +\- from nominal. Just like you did with velocity.

Also, where can I see the math for BC models and the 3D of solver?

Sorry had a long day, replaced an alternator on my Moms C230.

The math is quite complex and gets more complex the deeper you dive. Trigonometry, differential equations, polynomials, frankly I barely grasp just a portion of it, and the deeper I go the more I wanna just claw my way out! Lol..

Here is one of many functions that help determine the drag used each step of the calculation:

dataPoints = mach value & corresponding cD ref.

// Calculate the initial rate based on the first two data points
const dx = dataPoints[1].A - dataPoints[0].A;
const dy = dataPoints[1].B - dataPoints[0].B;
const rate = dy / dx;
curve[0] = { A: 0, B: rate, C: dataPoints[0].B - dataPoints[0].A * rate };
// Calculate the curve using 2nd degree polynomials on three adjacent points
for (let i = 1; i < numPoints - 1; i++) {
const { A: x1, B: y1 } = dataPoints[i - 1];
const { A: x2, B: y2 } = dataPoints;
const { A: x3, B: y3 } = dataPoints[i + 1];
const a = ((y3 - y1) * (x2 - x1) - (y2 - y1) * (x3 - x1)) /
((x3 * x3 - x1 * x1) * (x2 - x1) - (x2 * x2 - x1 * x1) * (x3 - x1));
const b = (y2 - y1 - a * (x2 * x2 - x1 * x1)) / (x2 - x1);
const c = y1 - (a * x1 * x1 + b * x1);
curve = { A: a, B: b, C: c };

-Matt
 
Interesting - so a Ballistic Coefficient model is simply a set of points on (mach, cD)? So this routine is creating a 2nd order poly to interpolate between the closest points to the current mach number?

Many years ago in college I wrote dynamic simulation software to calculate steady-state solutions of wrist anatomy, considering the variable wrist joint geometry (coming from CT and MRI data), external forces, and cartilage and ligaments. It relied on a dynamics solver called SD-FAST, which meant that I had to simulate in a jillion tiny time steps and slowly apply loads to reach a pseudo steady-state, since the system was numerically stiff and wildly non-linear at times. It got so unruly that I had to add an OpenGL based graphics output to be able to readily comprehend the outputs and stop simulations that went unstable. I learned that I'm not a natural programmer and I was using unnecessarily difficult coding APIs (Visual C++) and language (C++) to study a very complicated mechanical system but every now and then the urge still arises within me to code to solve a real-world problem.

David
 
Interesting - so a Ballistic Coefficient model is simply a set of points on (mach, cD)? So this routine is creating a 2nd order poly to interpolate between the closest points to the current mach number?

More so the 'Drag Coefficient', as Ballistic Coefficient and Drag Coefficient are two different terms. Drag Co-efficient quantifies the drag or resistance of an object in a fluid environment, such as air or water, which is what the above calculation was for.

Yes on the second bolded portion.

I likewise have some faint periods of history with some VB, C#, Javascript, but it doesn't come to me naturally nor is any of my education formal. My apps script in google sheets is 1500 lines of code, which could probably be reduced to half if I were an efficient and educated programmer lol.

-Matt