# Angle between three points (2D): Simple code snippet.

posted 2014-Feb-11

Have three 2D points and want to find the angle between them? In JavaScript:

// Center point is p1; angle returned in radians function findAngle(p0,p1,p2) { var a = Math.pow(p1.x-p0.x,2) + Math.pow(p1.y-p0.y,2), b = Math.pow(p1.x-p2.x,2) + Math.pow(p1.y-p2.y,2), c = Math.pow(p2.x-p0.x,2) + Math.pow(p2.y-p0.y,2); return Math.acos( (a+b-c) / Math.sqrt(4*a*b) ); }

*If speed matters, you may be able to make that a little bit faster by not using Math.pow() and manually squaring the differences instead.*

In Ruby, assuming points are `[x,y]`

arrays instead of objects with `.x`

and `.y`

properties, and converting to degrees:

# p1 is the center point; result is in degrees def angle_between_points( p0, p1, p2 ) a = (p1[0]-p0[0])**2 + (p1[1]-p0[1])**2 b = (p1[0]-p2[0])**2 + (p1[1]-p2[1])**2 c = (p2[0]-p0[0])**2 + (p2[1]-p0[1])**2 Math.acos( (a+b-c) / Math.sqrt(4*a*b) ) * 180/Math::PI end

Credit for the JavaScript function upon which I based my code comes from this Stack Overflow answer, though that version has unnecessary sqrt calls. Read the answers on that page for the derivation of the above formula.