저는 두 벡터 사이의 각도를 찾기위한 라이브러리 방법이 있다고 상상하지 못할 것입니다. 정확하게 (수학이 맞다) 그리고 msdn과 google 주위를 잠깐 살펴보면 아무 것도 알려주지 않았습니다. Math.Atan
메서드를 호출하는 SLaks 버전을 사용합니다.
각도가 90도 이상인지 확인하기 위해 평면으로 '수평'을 사용하기 때문에 흥미로운 점에 유의해야합니다. 양수 X 축에서 측정하는 경우 endingLocation.x < Location.X의 경우 각도가 항상 90도 이상입니다.
편집 : 원래 질문이 45도 확인으로 변경되었습니다.
아래 섹션에서는 OP가 작성한 주석별로 부동 소수점 나누기를 수행하지 않고이를 수행하는 방법에 대해 설명합니다.
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)
.
각도가 부동 소수점 계산을 수행 할 필요없이보다 큰 45도 경우에 우리는 확인할 수 있습니다
If (EndLocation.X < Location.X) OrElse (Math.Abs(EndLocation.Y - Location.Y) > Math.Abs(EndLocation.X - Location.X) Then AngleGreaterThan45 = True.
같은 문은 다음과 같은 경우 뭔가 그래서.
'x 및 y 점으로 정의 된 선이 90도 이상의 각도로 가로선과 교차합니까?' 만약 그렇다면 라인이 수직 또는 수평이 아니라면 대답은 '예'입니다 (이 사실을 확신시키기 위해 몇 가지 예를 그린다). 이렇게하면 질문을 수정하는 데 도움이됩니다. –
저는 수학이 정확하다는 것을 알고 있습니다. 더 efferent 한 함수가 더 잘 구축되어 있는지 궁금합니다. (필자가 필요하지 않으면 부동 소수점 연산을하는 것이 싫어). –
@Scott Chamerlain이 내 대답을 살펴 봅니다. 매번 X 축에 수평을 사용하는 경우 아무런 문제없이 수행 할 수 있습니다. – msarchet