Чтобы найти угол, образованный тремя точками, вы можете использовать точечное произведение . Скажем, у вас есть три точки, настроенные так:
dot1
/
A /
/
/ theta
dot2-------dot3
B
Я предполагаю, что вы хотите найти угол theta
между линиями, созданными точками dot1
, dot2
и dot3
, где это точки, которые вы собрали у пользователя. Затем вы можете определить два вектора A
и B
:
A = dot1 - dot2
B = dot3 - dot2
Вычитание двух точек просто означает, что вы вычитаете каждый соответствующий компонент. Так это может выглядеть так в коде:
// 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;
Угол между этими двумя векторами, определенный точечным произведением:
A * B
theta = acos(-----------)
||A|| ||B||
Где ||A||
и ||B||
- длины векторов A
и B
соответственно, что является корнем квадратным из суммы квадратов компонентов (которая является просто формулой расстояния).
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) );
Точечное произведение A * B
- это просто сумма произведений компонентов, поэтому в коде это может выглядеть следующим образом:
double dotProduct = A.X * B.X + A.Y * B.Y;
Таким образом, возможно, у вас есть точечное произведение, определенное так:
double theta = (180/Math.PI) * Math.Acos(dotProduct / (ALen * BLen));
Это дает вам угол в градусах (помните, что Math.Acos()
возвращает угол в радианах).