I want to make a tool that can measure angles between two user defined spots on a form. I have no code to do this at the moment, so any code would be appreciated.
Th
To find the angle formed by three points, you can use the dot product. Say you have the three points set up like this:
dot1
/
A /
/
/ theta
dot2-------dot3
B
I assume you want to find the angle theta between the lines created by points dot1, dot2 and dot3, where they're points that you've collected from the user. Then, you can define two vectors A and B:
A = dot1 - dot2
B = dot3 - dot2
Subtraction of two points simply means that you subtract each corresponding component. So it might look like this in code:
// I'll just use another point to represent a vector
Point A = new Point();
A.X = dot1.X - dot2.X;
A.Y = dot1.Y - dot2.Y;
Point B = new Point();
B.X = dot3.X - dot2.X;
B.Y = dot3.Y - dot2.Y;
The angle between these two vectors as defined by the dot product is:
A * B
theta = acos(-----------)
||A|| ||B||
Where ||A|| and ||B|| are the lengths of the vectors A and B respectively, which is the square root of the sum of the squares of the components (which is simply the distance formula).
double ALen = Math.Sqrt( Math.Pow(A.X, 2) + Math.Pow(A.Y, 2) );
double BLen = Math.Sqrt( Math.Pow(B.X, 2) + Math.Pow(B.Y, 2) );
The dot product A * B is simply the sum of the products of the components, so it might look like this in code:
double dotProduct = A.X * B.X + A.Y * B.Y;
So you may perhaps have a dot product defined like this:
double theta = (180/Math.PI) * Math.Acos(dotProduct / (ALen * BLen));
This gives you the angle in degrees (remember that Math.Acos() returns the angle in radians).