- The Law of Cosines formula
- Vector Dot product formula
Law of Cosines
For any given triangle ABC with sides AB, BC and AC, the angle formed by the lines AB and BC is given by the formula:
Here is how we can derive that formula:
The same can be extended for other angles as well.
Now, if we were given 3 points on a cartesian plane, we can find the distance between any two points using the Euclidean distance formula:
So, to find the angle between three points A(x1,y1), B(x2,y2) and C(x3,y3), our formula becomes:
In Python we can represent the above formula using the code:
import numpy as np import math def angle_between_three_points(pointA, pointB, pointC): x1x2s = math.pow((pointA[0] - pointB[0]),2) x1x3s = math.pow((pointA[0] - pointC[0]),2) x2x3s = math.pow((pointB[0] - pointC[0]),2) y1y2s = math.pow((pointA[1] - pointB[1]),2) y1y3s = math.pow((pointA[1] - pointC[1]),2) y2y3s = math.pow((pointB[1] - pointC[1]),2) cosine_angle = np.arccos((x1x2s + y1y2s + x2x3s + y2y3s - x1x3s - y1y3s)/(2*math.sqrt(x1x2s + y1y2s)*math.sqrt(x2x3s + y2y3s))) return np.degrees(cosine_angle) A = np.array([2,4]) B = np.array([8,7]) C = np.array([9,1]) print("Angle between points:", angle_between_three_points(A,B,C)) # gives 72.89 A = np.array([0,0]) B = np.array([0,4]) C = np.array([4,0]) print("Angle between points:", angle_between_three_points(A,B,C)) # gives 45.0
Vector Dot Product
The three points can also be represented as a vector as shown below.
where,
The scalar product or the dot product of two vectors is represented by the formula:
where || * || is the magnitude of the vector and θ is the angle made by the two vectors.
From the above formula we can represent the angle using the formula:
In Python we can represent the above formula using the code:
def angle_between_three_points(pointA, pointB, pointC): BA = pointA - pointB BC = pointC - pointB try: cosine_angle = np.dot(BA, BC) / (np.linalg.norm(BA) * np.linalg.norm(BC)) angle = np.arccos(cosine_angle) except: print("exc") raise Exception('invalid cosine') return np.degrees(angle)
The above is code from my post where I talked about finding the collinearity of three points on a plane using the angle formed by the points.
References: