Я бы не подумал, что есть библиотечный метод для определения угла между двумя векторами, вы делаете это правильно (математика верна) и быстрый взгляд вокруг msdn, и Google ничего мне не предоставил. Я бы использовал версию SLaks для вызова метода Math.Atan
.
Интересно отметить, поскольку вы используете «горизонталь» в качестве плоскости, чтобы определить, больше ли угол 90 градусов. Если endLocation.x
Edit:
Исходный вопрос был изменен на 45 градусов.
В следующем разделе обсуждается, как это сделать без деления с плавающей запятой на комментарий, сделанный ОП.
Чтобы выяснить, есть ли у вас угол 45 градусов, мы знаем кое-что, даже не вызывая ATan
по точкам.
Сначала наклон под углом 45 градусов равен 1. Так что если
Math.Abs((EndLocation.y - location.y)/(EndLocation.X - Location.X)) > 1
У вас есть угол, который> 45 градусов, однако, так как перестановки под углом 45 градусов происходят 4 раза по кругу. Нам нужно проверить несколько вещей.
Если EndLocation.X < Location.X
, то угол больше 45 градусов. Это представляет все углы, которые остались от оси Y (90 - 270). Чтобы определить, больше ли угол 45 градусов, нам нужно знать только, является ли абсолютное значение наклона больше 1. Это всегда будет верно для следующего.
Math.Abs(EndLocation.Y - Location.Y) > Math.Abs(EndLocation.X - Location.X)
.
То есть с оператором if, следующим после
If (EndLocation.X < Location.X) OrElse (Math.Abs(EndLocation.Y - Location.Y) > Math.Abs(EndLocation.X - Location.X) Then AngleGreaterThan45 = True.
Мы можем определить, больше ли угол 45 градусов, без необходимости выполнять какие-либо вычисления с плавающей запятой.