# calculation of a trajectory for example

```#
# Trajectory calculation of a bullet
# You can run this script with GNU Octave ( https://www.gnu.org/software/octave/ )
# Simple create a File "trajectory.m" and copy this code in it.
# Open a Terminal and run this command:
#
# octave trajectory.m
#
#

# diameter and weight of the bullet
d = 0.008                       # diameter in m
m = 0.007                       # weight in kg

BC = 0.4                        # ballistic coefficient

d_inch = d * 39.3701            # diameter in inch
m_pound = m * 2.20462           # mass in pound

# If the bullet is equal to the G1 standard bullet, the BC is 1.0 and the formfactor is 1.0
# The standard bullet weight 1 pound and with a diameter of 1.0 inch
# http://en.wikipedia.org/wiki/Ballistic_coefficient
formfactor = m_pound / (d_inch ^ 2.0 * BC)

# The calculation is split in time steps.
# the smaller the time steps the more accuracy is the result
timestep = 0.01                 # time step in sec

# release direction
vx = 200.0                      # the horizontal component of the velocity in m/s
vy = 10.0                       # the vertical component of the velocity in m/s,
# this is zero for a horizontal shoot. Downwards it is lower than zero (-) and upwards it is bigger than zero (+)

# Start values for the trajectory
sx = 0.0                        # horizontal component of the trajectory in m
sy = 0.0                        # vertical component of the trajectory in m

rho = 1.2041                    # density of the air in kg/m³
g = 9.81                        # acceleration of the earth in m/s²
t = 0.0                         # flight time begin with 0
A = d^2.0 * pi / 4.0            # cross section of the bullet in m²

mach_1 = 340.3;                 # velocity of mach = 1 in in m/s

# the mach values with the coresponding cw values of the G1 drag table
mach_values = [
0.00, 0.20, 0.30, 0.40, 0.50, 0.60, 0.70, 0.80, 0.90, 1.00, 1.10, 1.20, 1.30, 1.40, 1.50, 1.60, 1.70, 1.80, 1.90, 2.00, 2.50, 3.00, 4.00, 5.00
]
cw_values = [
0.26, 0.23, 0.22, 0.21, 0.20, 0.20, 0.21, 0.25, 0.34, 0.48, 0.58, 0.63, 0.65, 0.66, 0.65, 0.64, 0.63, 0.62, 0.60, 0.59, 0.53, 0.51, 0.50, 0.49
]

# run while the range is smaller than 350m.
# each pass of the loop one time step is calculated.
while sx < 350.0
printf("------------------------------------------------------------\n")

# the total amount of the velocity.
v = sqrt(vx^2.0 + vy^2.0)

# fetch the cw value from the G1 table:
mach = v / mach_1
cw = spline(mach_values,cw_values,mach)

# force of the air drag in N
# http://de.wikipedia.org/wiki/Luftwiderstand
F = 0.5 * rho * A * v^2.0 * cw * formfactor

# split the drag force in a horizontal and a vertical component.
Fx = F * vx / v
Fy = F * vy / v

# horizontal and vertical component of the retardment (negativ acceleration) in m/s²
# The vertical component is add with the earth accelaration.
ax = -Fx / m
ay = -Fy / m - g

# diff of the velocity
delta_vx = ax * timestep
delta_vy = ay * timestep

# distance in the time step
delta_sx = vx * timestep + delta_vx * timestep / 2.0
delta_sy = vy * timestep + delta_vy * timestep / 2.0

# add the distance in the time step to the whole distance
sx = sx + delta_sx
sy = sy + delta_sy

# velocities after the time step
vx = vx + delta_vx
vy = vy + delta_vy

# add the timestep to the total amount of time
t = t + timestep

endwhile

```