Keep in mind, I’m not a mathematician by any stretch of the imagination. That said I had a tough time tracking down clear instructions on how to calculate strike and dip programmatically that wasn’t tied to a specific programming language. So here is a working breakdown of the theory. You can also check out my Python script that takes a list of tuples (x, y, z) in UTM coordinates to calculate strike and dip.
Also known as a “3 Point Problem”, calculating strike and dip of a bedding plane using 3 coordinates is commonplace in geologic mapping and analysis for both surface collected data and subsurface methods (such as calculating from borehole horizons).
It is possible to calculate a planar surface from 3 points:
From those 3 points two distinct vectors AB and AC may be defined.
To calculate the normal vector of the plane, it is necessary to take the cross product of the above vectors:
i, j, k represent arbitrary coefficients for the second point along the normal vector and can be arbitrarily assigned a value. To simplify the calculations it is customary to assign a value of 1 to all three.
The vector AB and AC can be represented by the equations:
Where a, b, c and d, e, f represent the vector components. Calculating the cross product of the two vectors leaves us with a parametric equation:
Since we have already defined i, j, k as all equal to 1, we can ignore them and we are left with the components . These three components are coordinates of the pole from an arbitrary origin (0, 0, 0). For our purposes we’ll call them pseudo easting, northing and elevation.
Substituting in a, b, c, d, e, f we get:
The bearing of the strike line may then be calculated to pass through the z axis origin as strike has no vertical component.
u3 represents the z component of the pole, thus if its sign is negative we know through experimentation that we must reverse the direction of the strike line to obey the right hand rule in geology where strike is defined with dip direction to the right to do this we reverse the signs of E and N.
Strike is then calculated using the following equation:
Dip is calculated using the following equation:
Nicholson, W. K. (2006). Linear Algebra with Applications. Toronto, ON: McGraw-Hill Ryerson.