Bullet Ballistics with Atmospheric Drag

This application calculates the ballistics of a number of projectile calibers and weights in grains. Atmospheric conditions are taken into account such as the temperature in degrees Fahrenheit which are converted to Celsius and the barometric pressure is measured in inches Hg.

C# (235.7 KB)
4 Star
268 times
Add to favorites
E-mail Twitter del.icio.us Digg Facebook
Sign in to ask a question

  • Drag function not realistic
    7 Posts | Last post December 30, 2016
    • The application of RK4 to the ballistics problem in this program seems very well done. However, the use of a fixed drag coefficient makes it useless as a ballistics program. Refer to any Drag vs Mach table such as can be found on http://www.jbmballistics.com/ballistics/downloads/downloads.shtml. The program must check how the drag changed as the velocity changed for every iteration and apply it
    • I am using the equation F_D = 0.5 * rho * u * u * C_D * A from an unverified Wikipedia article: https://en.wikipedia.org/wiki/Drag_equation. F_D is the force of drag, rho is density of humid air which is a function of temperature, humidity, and atmospheric pressure, u is the flow velocity relative to the bullet, C_D is the fixed drag coefficient, and A is the reference area. I calculate D = 0.5 * rho * C * A, D = -0.5 * D / M in the Ballistics object constructor found in the source code file Ballistics.cs. I probably should not approximate density of humid air  as a constant. I apply the equation double cj = D * v * arg.arg2[j] in the velocity calculating function fxyzj in the Ballistics object. Much more experimentation is needed before your blanket condemnation of my program becomes truly a valid counterargument. 
    • I am sorry that this came across as an attack on your program. That's not what I meant. I just mean your program has the ability to be very good. The drag formula is by no means unverified and is established in physics e.g. https://www.grc.nasa.gov/www/k-12/airplane/drageq.html. You declare drag as a constant 0.295 which I assume is from the same Wikipedia. I am employed as a Forensic Ballistics Expert and have access to a doppler radar where I can clearly see how drag changes with velocity. I also have written a trajectory calculation program using classical methods that correlate very well with actual firing data. Hence my interest in your code. What I am not is a programmer. If one would want to change drag with velocity, should it be done in the fxyzj function? I am sorry my comments came across as an attack. It was 3:48AM which is not my best time of day.
    • Thanks for your clarification. I am somewhat overly sensitive sometimes. Now the only variables in the drag force equation are the density of the medium which is usually the density of humid air (since you are a forensic expert the medium could perhaps also be water) and the velocity. You are right that I use a constant drag coefficient of 0.295. The area, A, and mass, M, are dependent upon the caliber and weight of the bullet. As stated before the density is a function of the humidity, temperature, and pressure of the humid air. I don't think approximating the density as constant is especially bad for low trajectories. However, when I use the 16 inch 50 caliber Iowa class battleship gun the trajectory can be quite high so the density should be variable. I would love to have gun manufacturers measured drag coefficients and areas for all the calibers that I use in the calculator. That way many of the parameters would become bullet dependent and variable over the various calibers, weights, and muzzle velocities.
    • I probably need to use drag coefficients derived from either actual wind tunnel velocity experiments or from the ballistic coefficient approximated at varying velocities. If I could find data for all calibers I could use a simple table lookup algorithm within the fxyzj method of the Ballistics object. Wikipedia shows that at subsonic velocity the drag coefficient of a F-4 Phantom II fighter is 0.021 yet it becomes 0.044 at supersonic velocity. Therefore, the drag coefficient is dependent upon velocity and should not be treated as a universal constant just like you initially stated.
    • Thanks for your comments. Here is the paper that has the equations that I utilized: http://scholarcommons.usf.edu/cgi/viewcontent.cgi?article=4836&context=ujmm. The equations have the drag varying with respect to the speed and the velocity components. Therefore, the drag is not constant. However, I did have an error in my code. I divided D by 0.5 when I should not have made that division. I will upload my corrected code.
    • Lookup tables are indeed how it is done usually within a select case block. Are you familiar with the concept of the standard bullet? Did you have a look at e.g. http://ballisticslib.cvs.sourceforge.net/viewvc/ballisticslib/GNU%20Ballistics%20Library/. The one reason I like your approach is 1. It uses RK4 an 2. You can determine the X distance from known parameters. Other than in commercial applications, we are not interested in the future of bullet travel, but in the past so we can determine where the crook was that fired the shot based on the incidence angle and bullet particulars 
  • New case to use your very interesting code
    1 Posts | Last post June 18, 2016
    • Hi,
      Thank you to share with us your very interesting code. I wanted to know if it is possible to re-use part of code to calculate "Aircraft cargo drop range" like we can see in :
      In this link, we have all entry elements to calculate but no real algorythm.
      I wanted to know if you can help me.
      Thank you for your answer.