Computing a Ship's Course from Four Bearings

One machine can do the work of fifty ordinary men. No machine can do the work of one extraordinary man.

— Elbert Hubbard (1856–1915)


Figure 1: U-boat in the Atlantic.

Figure 1: U-boats in the Atlantic (Source).

I have made no secret of my love for all things nautical – even my game playing has a nautical theme. When I have spare time, I like to play Silent Hunter 3 or 4. While these are older versions of the Silent Hunter franchise, I still enjoy playing them very much. What brings me back to Silent Hunter is how easily I can vary the level of realism to suit my gaming needs.

Recently, I have been working on increasing the level of realism by manually tracking targets. As with real WW2 submarines, this manual tracking is performed using very limited sensor data and tools:

  • Hydrophones for getting rough bearings and target speed.

    The hydrophones provided directional information and, given the ship class, you could estimate its speed by the prop rotation rate.

  • Periscope for taking optical bearings and target range

    The periscope could take very accurate bearings and it incorporated a stadimeter for estimating target range based on target height and class.

  • Maneuvering Boards

    The maneuvering board is a tool from plotting target data and can be used to derive course, speed, and position. There is a rich body of work (11 Mbyte file) on the practical applications of the maneuvering board. Here is a short Powerpoint presentation on the maneuvering board.

There is large body of work associated with determining a target's course, position, and speed using only bearings. In this post, I will focus on an algebraic technique with  geometrical options that would have been accessible during WW2. This is an interesting application of geometry and it has practical applications in other nautical situations (e.g. collision avoidance). My approach here will be to provide some background material, a high-level mathematical overview and proof based on solving a system of ten linear equations, and a worked example in Mathcad. My plan is to use the Mathcad model to generate some training scenarios for the geometrical methods that I will cover in later posts.

Ultimately, I want to be able to develop my own derivation of a totally geometric method used by gamers called Kuikueg's method, which is equivalent to the algebraic method covered here and is easily implemented used Silent Hunter's graphical interface.


The world's navies have long practiced Target Motion Analysis (TMA), which is a process for determining the position, course, and speed of a target using passive sensor information (i.e. bearings with no range information). Vessels that depend on stealth, like submarines, are loath to use active sensors because these sensors give away their position – this was true even during WW2.

Having a realistic simulation of WW2 submarine combat means performing TMA to get critical target information, which we can use to maneuver the submarine into an optimum firing position and launch a "straight-runner" torpedo.

The TMA method I will be reviewing here is known as Spiess TMA (original paper, NavOps). Speiss' paper includes both algebraic and geometric methods. I will review the algebraic approach in this post and the geometric approach in a later post.


For those who want to follow along with my Mathcad work, here is my worksheet.


The following analysis makes the following assumptions:

  • The target ship is moving with a constant course and speed.
  • We take three bearings at known times.
  • We setup an x-y coordinate system with the y-axis along the first bearing line.
  • We know the course and speed of our own ship.

Mathematical Overview

Mathematically, we will determine the target's course, position, and speed using the following approach.

  • Take three bearings and compute a bearing measurement at a given future time, assuming our own ship continues on its present course. We will prove that we can predict the fourth bearing measurement given the three previous bearing measurements.
  • Change the course of our ship so that we can get a different bearing from the predicted.
  • Triangulate on the target using the actual bearing and the predicted bearing.
  • Now that we have the target's course and position, we can use the three previous bearings to compute the target's speed.

The predict fourth bearing line is known as the Spiess line. Using Mathcad to solve a ten-equation linear system, I will slavishly follow the proof in Spiess' original paper to derive an algebraic equation for the Spiess line.

Spiess' paper calls out a scenario where this method will not produce a unique answer. The condition is rather complex and easily avoided, so I will not cover this situation in this post. I refer you to Spiess' (original paper) for the details.

Algebraic Derivation of Fourth Bearing Line

Figure 2 shows how the Spiess line equation is derived. Assuming that our coordinate system's y-axis is along the first bearing line, we can form a linear system of ten equations and ten unknowns:

  • 3 equations represent the bearing lines.
  • 3 equations express the target position versus along the y-axis assuming the target moves at constant speed.
  • 3 equations express the target position versus along the x-axis assuming the target moves at constant speed.
  • 1 equation puts our submarine at x = 0.

Because this is such a large system of equations, it is a bit unwieldy to show here – just click on Figure 2 to see the whole thing. I also included the solutions for the target velocity components in terms of known target information.

Figure M: Derivation of the Spiess Line Equation.

Figure 2: Derivation of the Spiess Line Equation.

Worked Example

Scenario Setup

Figure 3 shows a scenario that I setup in my Mathcad model. The model is parameterized so that I can try any scenarios that I wish. I tried dozens and they all worked, so I feel pretty confident in my knowledge of the Spiess line.

Figure M: Scenario Setup.

Figure 3: Scenario Setup.

Scenario Graphic

Figure 4 shows my graph of the example scenario.

Figure M: Scenario Chose to Demonstrate Use of Spiess Line.

Figure 4: Scenario Chosen to Demonstrate Use of the Spiess Line.


I was able to duplicate the work done in Spiess' original work and develop a Mathcad model that I can use for preparing some personal training scenarios. Overall, this was a good exercise. Going forward, I could use this algebraic approach to develop a Java-based tool to use while gaming, but I really want to develop my ability to use the  geometric form of this method on standard maps using compass and ruler. This will provide me with a more historically accurate gaming experience.

I will go through examples of the geometric version of this method in a later post. My plan for that post is to use Mathcad to drive Visio for generating quality graphics of some good training examples.

This entry was posted in Military History, Navigation. Bookmark the permalink.

4 Responses to Computing a Ship's Course from Four Bearings

  1. Filip says:

    A very interesting discussion. I tried to use your example to refine my Mathcad skills a bit further but I am not able in reconstructing the plot in the way you did. Would it be possible so send me a picture with the arguments of the plot?

    • mathscinotes says:

      I have added a link to my most recent version of the worksheet. Hopefully that is helpful. I will also add an image of the graph with arguments to this response.

      with arguments

  2. Filip says:

    Thank you, this was very helpful.

  3. Tom Dean says:

    Very interesting post. I read the original paper before finding this.
    I looked into deriving the solution in Maple, using a slightly different method and did not succeed.
    I differ in equations 5 thru 10. I want to not restrict the initial position of aligning the Y axis with the first bearing. For equation 5, I used
    tgtY[2] - tgtY[1] = vy * (t[2] - t[1])
    tgtY[3] - tgtY[2] = vy * (t[3] - t[2])
    tgtY[4] - tgtY[3] = vy * (t[4] - t[3])
    and the same for the three X equations.
    Do these seem valid equations for this?
    Tom Dean


Leave a Reply

Your email address will not be published. Required fields are marked *