Skip to content
Select theme

Velocity in Horizontal Projection with Resistance

The source download includes only this article, without shared templates or dependencies. To compile it, clone the notes repository and follow its setup instructions.

Horizontal projection is obviously easy, and thus very boring. But if we consider linear resistance, things are different.

As shown in the figure, we discuss about the relationship between 𝑣𝑥𝑣𝑥 and 𝑣𝑦𝑣𝑦. You can study it by solving ODEs, but we are not going to do that here, because it is boring. However, I will show this solution here, in order to inpire you about what is going on here.

Solution. Consider a projectile launched horizontally with initial velocity 𝑣0𝑣0 and no initial vertical velocity. Let 𝑥𝑥 be horizontal and 𝑦𝑦 be vertical upward. Linear drag is taken as 𝐹𝑑​=​−𝑘𝑣, and let 𝜆​=𝑘𝑚. The component ODEs are

𝑑𝑣𝑥𝑑𝑡=−𝜆𝑣𝑥,𝑑𝑣𝑦𝑑𝑡=−𝑔−𝜆𝑣𝑦,𝑑𝑣𝑥𝑑𝑡=−𝜆𝑣𝑥,𝑑𝑣𝑦𝑑𝑡=−𝑔−𝜆𝑣𝑦,𝑑𝑣𝑥𝑑𝑡=−𝜆𝑣𝑥,𝑑𝑣𝑦𝑑𝑡=−𝑔−𝜆𝑣𝑦,

with initial conditions

𝑣𝑥(0)=𝑣0,𝑣𝑦(0)=0.𝑣𝑥(0)=𝑣0,𝑣𝑦(0)=0.𝑣𝑥(0)=𝑣0,𝑣𝑦(0)=0.

For 𝑣𝑥𝑣𝑥,

𝑑𝑣𝑥𝑣𝑥=−𝜆𝑑𝑡,𝑑𝑣𝑥𝑣𝑥=−𝜆𝑑𝑡,

so

𝑣𝑥(𝑡)=𝑣0𝑒−𝜆𝑡.𝑣𝑥(𝑡)=𝑣0𝑒−𝜆𝑡.

For 𝑣𝑦𝑣𝑦,

𝑑𝑣𝑦𝑑𝑡+𝜆𝑣𝑦=−𝑔.𝑑𝑣𝑦𝑑𝑡+𝜆𝑣𝑦=−𝑔.𝑑𝑣𝑦𝑑𝑡+𝜆𝑣𝑦=−𝑔.

Using the integrating factor 𝑒𝜆𝑡𝑒𝜆𝑡,

𝑑𝑑𝑡(𝑒𝜆𝑡𝑣𝑦)=−𝑔𝑒𝜆𝑡.𝑑𝑑𝑡(𝑒𝜆𝑡𝑣𝑦)=−𝑔𝑒𝜆𝑡.𝑑𝑑𝑡(𝑒𝜆𝑡𝑣𝑦)=−𝑔𝑒𝜆𝑡.

Integration gives

𝑒𝜆𝑡𝑣𝑦=−𝑔𝜆𝑒𝜆𝑡+𝐶,𝑒𝜆𝑡𝑣𝑦=−𝑔𝜆𝑒𝜆𝑡+𝐶,𝑒𝜆𝑡𝑣𝑦=−𝑔𝜆𝑒𝜆𝑡+𝐶,

hence

𝑣𝑦(𝑡)=−𝑔𝜆+𝐶𝑒−𝜆𝑡.𝑣𝑦(𝑡)=−𝑔𝜆+𝐶𝑒−𝜆𝑡.𝑣𝑦(𝑡)=−𝑔𝜆+𝐶𝑒−𝜆𝑡.

The initial condition 𝑣𝑦(0)​=0 gives 𝐶​=𝑔𝜆, so

𝑣𝑦(𝑡)=−𝑔𝜆(1−𝑒−𝜆𝑡)=𝑔𝜆(𝑒−𝜆𝑡−1).𝑣𝑦(𝑡)=−𝑔𝜆(1−𝑒−𝜆𝑡)=𝑔𝜆(𝑒−𝜆𝑡−1).𝑣𝑦(𝑡)=−𝑔𝜆(1−𝑒−𝜆𝑡)=𝑔𝜆(𝑒−𝜆𝑡−1).

Eliminate 𝑡𝑡 using

𝑒−𝜆𝑡=𝑣𝑥𝑣0.𝑒−𝜆𝑡=𝑣𝑥𝑣0.

Then

𝑣𝑦=−𝑔𝜆(1−𝑣𝑥𝑣0).𝑣𝑦=−𝑔𝜆(1−𝑣𝑥𝑣0).𝑣𝑦=−𝑔𝜆(1−𝑣𝑥𝑣0).

Equivalently,

𝑣𝑦=𝑔𝜆(𝑣𝑥𝑣0−1),𝑣𝑦=𝑔𝜆(𝑣𝑥𝑣0−1),𝑣𝑦=𝑔𝜆(𝑣𝑥𝑣0−1),

or

𝑣𝑦+𝑔𝜆=𝑔𝜆𝑣0𝑣𝑥.𝑣𝑦+𝑔𝜆=𝑔𝜆𝑣0𝑣𝑥.𝑣𝑦+𝑔𝜆=𝑔𝜆𝑣0𝑣𝑥.

Thus the velocity components satisfy the linear relation

𝑣𝑦=𝑔𝜆𝑣0𝑣𝑥−𝑔𝜆.𝑣𝑦=𝑔𝜆𝑣0𝑣𝑥−𝑔𝜆.𝑣𝑦=𝑔𝜆𝑣0𝑣𝑥−𝑔𝜆.

The point (𝑣𝑥,𝑣𝑦)(𝑣𝑥,𝑣𝑦) lies on the straight line from (𝑣0,0)(𝑣0,0) to (0,​−𝑔𝜆).

You can see that we got exponentials during the process, but no exponential appeared in the final expression. So maybe solving these equations isn’t necessary here. And indeed you do not need to solve them. Here is what I discovered.

Solution. It follows that

𝑎𝑥=−𝑘𝑚𝑣𝑥,𝑎𝑥=−𝑘𝑚𝑣𝑥,
(1)
𝑎𝑦=−𝑘𝑚𝑣𝑦−𝑔.𝑎𝑦=−𝑘𝑚𝑣𝑦−𝑔.
(2)

Let the standard motion be

𝑎=−𝑘𝑚𝑣,𝑎=−𝑘𝑚𝑣,
(3)

whose initial values are 𝑎0​=0, 𝑣0​=1. Then in kinematics sense 𝑎𝑎 and 𝑣𝑣 are uniquely determined. From (1) we have

𝑣𝑥=𝑣0⋅𝑣.𝑣𝑥=𝑣0⋅𝑣.
(4)

From (2) we have

𝑣𝑦+𝑣𝑡=𝑣𝑡⋅𝑣,𝑣𝑦+𝑣𝑡=𝑣𝑡⋅𝑣,
(5)

where 𝑣𝑡​=𝑚𝑔𝑘.

Hence, we obtain

𝑣𝑥𝑣0=𝑣𝑦𝑣𝑡+1.𝑣𝑥𝑣0=𝑣𝑦𝑣𝑡+1.
(6)

Thus,

𝑚𝑔𝑘𝑣0𝑣𝑥=𝑣𝑦+𝑚𝑔𝑘.𝑚𝑔𝑘𝑣0𝑣𝑥=𝑣𝑦+𝑚𝑔𝑘.𝑚𝑔𝑘𝑣0𝑣𝑥=𝑣𝑦+𝑚𝑔𝑘.
(7)

This is very simple and elegant. However, there is another approach. It is not so simple, but it is more fundamental.

Solution.

Let the velocity space be (𝑣𝑥,𝑣𝑦)(𝑣𝑥,𝑣𝑦), then the velocity vector starts at (𝑣0,0)(𝑣0,0). The terminal velocity is 𝑉​=(0,​−𝑚𝑔𝑘). Then the residual velocity is

𝑢=𝑣−𝑉=(𝑣𝑥,𝑣𝑦+𝑚𝑔𝑘)𝑢=𝑣−𝑉=(𝑣𝑥,𝑣𝑦+𝑚𝑔𝑘)𝑢=𝑣−𝑉=(𝑣𝑥,𝑣𝑦+𝑚𝑔𝑘)

. Hence,

𝑎𝑢=−𝑘𝑚𝑢𝑎𝑢=−𝑘𝑚𝑢

. Since 𝑎𝑢𝑎𝑢 is always on the oppsite direction of 𝑢𝑢, we know that the endpoint of 𝑢𝑢 is a line over time in the velocity space. The initial value of this line is 𝑢0​=(𝑣0,𝑚𝑔𝑘), the end is 𝑢​=(0,0). Thus,

𝑢(𝑡)=(𝑡,𝑚𝑔𝑘𝑣0𝑡).𝑢(𝑡)=(𝑡,𝑚𝑔𝑘𝑣0𝑡).𝑢(𝑡)=(𝑡,𝑚𝑔𝑘𝑣0𝑡).

Hence, 𝑢𝑦​=𝑚𝑔𝑘𝑣0𝑢𝑥. Since 𝑢​=(𝑣𝑥,𝑣𝑦​+𝑚𝑔𝑘), we have

𝑚𝑔𝑘𝑣0𝑣𝑥=𝑣𝑦+𝑚𝑔𝑘.𝑚𝑔𝑘𝑣0𝑣𝑥=𝑣𝑦+𝑚𝑔𝑘.𝑚𝑔𝑘𝑣0𝑣𝑥=𝑣𝑦+𝑚𝑔𝑘.

The reader can verify that the methods we use here can be extended to many other problems.

View Typst source
#import "@preview/noteworthy:0.4.0": noteworthy
#import "/themes/site/notes.typ": *
#show: web-equations
#import "/typ/shared.typ": *
#import "/phys/shared.typ": *
#import "/themes/site/cetz.typ": canvas, draw

#show: equations

#show: tylenotes.with(
  title: "Velocity in Horizontal Projection with Resistance",
  date: "2026-09-25",
  tags: ("kinematics", "projection"),
  summary: "Relationship between horizontal velocity and vertical velocity in horizontal projection with resistance.",
)

Horizontal projection is obviously easy, and thus very boring.
But if we consider linear resistance, things are different.

#canvas({
  import draw: *

  let x_max = 6.5
  let y_max = 6.0

  line((0, 0), (x_max, 0), stroke: black + 1pt, mark: (end: ">"))
  line((0, 0), (0, -y_max), stroke: black + 1pt, mark: (end: ">"))

  content((x_max + 0.2, 0), [x], anchor: "west")
  content((0, -y_max - 0.2), [y], anchor: "north")

  let v0x = 10.0
  let tau = 0.6
  let g = 9.8
  let v_ter = g * tau

  let t_max = 1.5
  let n = 30

  let pts = ()
  for i in range(n + 1) {
    let t = t_max * i / n
    let x = v0x * tau * (1 - calc.exp(-t / tau))
    let y = -(v_ter * t - v_ter * tau * (1 - calc.exp(-t / tau)))
    pts.push((x, y))
  }
  line(..pts, stroke: blue + 1.5pt)

  let t_p = 0.8
  let x_p = v0x * tau * (1 - calc.exp(-t_p / tau))
  let y_p = -(v_ter * t_p - v_ter * tau * (1 - calc.exp(-t_p / tau)))
  let vx_p = v0x * calc.exp(-t_p / tau)
  let vy_p = -v_ter * (1 - calc.exp(-t_p / tau))

  circle((x_p, y_p), radius: 0.08, fill: black, stroke: none)
  content((x_p + 0.15, y_p - 0.15), text(size: 10pt, $P$), anchor: "north-west")

  let v_scale = 0.35

  line((x_p, y_p), (x_p + vx_p * v_scale, y_p), stroke: red + 1pt, mark: (end: ">"))
  content((x_p + vx_p * v_scale / 2, y_p + 0.15), text(size: 8pt, fill: red, $v_x$), anchor: "south")

  line((x_p, y_p), (x_p, y_p + vy_p * v_scale), stroke: green + 1pt, mark: (end: ">"))
  content((x_p - 0.2, y_p + vy_p * v_scale / 2), text(size: 8pt, fill: green, $v_y$), anchor: "east")

  let v_end = (x_p + vx_p * v_scale, y_p + vy_p * v_scale)
  line((x_p, y_p), v_end, stroke: purple + 1.5pt, mark: (end: ">"))
  content((v_end.at(0) + 0.15, v_end.at(1) - 0.15), text(size: 8pt, fill: purple, $v$), anchor: "south-west")

  line((x_p, 0), (x_p, y_p), stroke: (paint: gray, thickness: 0.8pt, dash: "dashed"))
  line((0, y_p), (x_p, y_p), stroke: (paint: gray, thickness: 0.8pt, dash: "dashed"))

  content((0, 0), text(size: 9pt)[O], anchor: "north-east")
})

As shown in the figure, we discuss about the relationship between $v_x$ and $v_y$.
You can study it by solving ODEs, but we are not going to do that here, because it is boring.
However, I will show this solution here, in order to inpire you about what is going on here.

#solution[
  #set math.equation(numbering: none)
  Consider a projectile launched horizontally with initial velocity $v_0$ and no initial vertical velocity. Let $x$ be horizontal and $y$ be vertical upward. Linear drag is taken as $F_d = -k v$, and let $lambda = k/m$. The component ODEs are
  $ d v_x / d t = -lambda v_x, quad d v_y / d t = -g - lambda v_y, $
  with initial conditions
  $ v_x(0)=v_0, quad v_y(0)=0. $

  For $v_x$,
  $ (d v_x)/v_x = -lambda d t, $
  so
  $ v_x(t)=v_0 e^(-lambda t). $

  For $v_y$,
  $ d v_y / d t + lambda v_y = -g. $
  Using the integrating factor $e^(lambda t)$,
  $ d/d t (e^(lambda t) v_y) = -g e^(lambda t). $
  Integration gives
  $ e^(lambda t) v_y = -g/lambda e^(lambda t)+C, $
  hence
  $ v_y(t) = -g/lambda + C e^(-lambda t). $
  The initial condition $v_y(0)=0$ gives $C=g/lambda$, so
  $ v_y(t) = -g/lambda (1-e^(-lambda t)) = g/lambda (e^(-lambda t)-1). $

  Eliminate $t$ using
  $ e^(-lambda t) = v_x/v_0. $
  Then
  $ v_y = -g/lambda (1-v_x/v_0). $
  Equivalently,
  $ v_y = g/lambda (v_x/v_0 - 1), $
  or
  $ v_y + g/lambda = g/(lambda v_0) v_x. $

  Thus the velocity components satisfy the linear relation
  $ v_y = g/(lambda v_0) v_x - g/lambda. $
  The point $(v_x,v_y)$ lies on the straight line from $(v_0,0)$ to $(0,-g/lambda)$.
]

You can see that we got exponentials during the process,
but no exponential appeared in the final expression.
So maybe solving these equations isn't necessary here.
And indeed you do not need to solve them. Here is what I discovered.

#solution[
  It follows that
  $ a_x = - k/m v_x, $ <eq:x>
  $ a_y = - k/m v_y - g. $ <eq:y>
  Let the standard motion be
  $ a = -k/m v, $
  whose initial values are $a_0 = 0$, $v_0 = 1$.
  Then in kinematics sense $a$ and $v$ are uniquely determined.
  From @eq:x we have
  $ v_x = v_0 dot v. $ <eq:x_>
  From @eq:y we have 
  $ v_y + v_t = v_t dot v, $ <eq:y_>
  where $v_t = (m g)/k$.
  
  Hence, we obtain
  $ v_x / v_0 = v_y / v_t + 1. $
  Thus, $ (m g)/(k v_0) v_x = v_y + (m g)/k.  $
]

This is very simple and elegant.
However, there is another approach. It is not so simple, but it is more fundamental.

#solution[
  #set math.equation(numbering: none)

  Let the velocity space be $(v_x, v_y)$,
  then the velocity vector starts at $(v_0, 0)$.
  The terminal velocity is $V = (0, -(m g)/k)$.
  Then the residual velocity is $ u = v - V = (v_x, v_y + (m g)/k) $.
  Hence, $ a_u = - k/m u $.
  Since $a_u$ is always on the oppsite direction of $u$,
  we know that the endpoint of $u$ is a line over time in the velocity space.
  The initial value of this line is $u_0 = (v_0, (m g)/k)$, the end is $u = (0, 0)$.
  Thus, $ u(t) = (t, (m g)/(k v_0) t). $ Hence, $u_y = (m g)/(k v_0) u_x$.
  Since $u = (v_x, v_y+(m g)/k)$, we have
  $ (m g)/(k v_0) v_x = v_y + (m g)/k.  $
]

The reader can verify that the methods we use here can be extended to many other problems.

Notes © zzj · Content: CC BY-SA 4.0 · Code: MIT · Built with Astro + Starlight