문제

북남동서 방향의 논리를 사용하여 선분(lx1, ly1)(lx2, ly2)을 기준으로 2D 그래프에서 점(px, py)의 위치를 ​​확인하려고 합니다.내가 구현한 논리는 점에서 선분에 수직선을 그리는 것입니다.

수직선이 선 위에 있으면 남쪽을 의미합니다.

오른쪽의 점이 동쪽을 의미하는 경우.

왼쪽의 점이 서쪽을 의미하는 경우.

수직이 선에서 앞으로 멀어지면 북쪽을 의미합니다.

수직이 선에서 뒤로 멀어지면 남쪽을 의미합니다.

내 문제는 이 논리가 서류상으로는 좋아 보이지만 NW, NE, SW 또는 SE 사례인지 결정하기가 정말 어렵다는 것입니다.누구든지 이 논리를 계산하는 방법을 제안할 수 있습니까??저는 C++를 사용하고 있지만 어떤 언어의 알고리즘이라도 큰 도움이 될 것입니다.

북남동서 관계를 계산하기 위해 선분의 끝점을 사용하고 있습니다.

건배

도움이 되었습니까?

해결책

  • delta_x = x2 - x1
  • delta_y = y2 - y1
  • distance = sqrt (delta_x^2 + delta_y^2)
  • tan (theta) = delta_y / delta_x
  • theta = arctan (delta_y / delta_x) ;; 하지만 0으로 나누지는 마세요!
  • 곱하다 theta ~에 의해 180/PI 학위를 취득하기 위해

각도는 x축의 양수 쪽을 기준으로 시계 반대 방향입니다.결국에는 0이 위쪽(오른쪽이 아닌)이 되고 시계 방향으로 실행되도록 각도의 방향을 다시 지정하기 위해 소량의 대수학을 수행해야 합니다.하지만 그 전에는:

문제는 arctan (1 / -1) 와 같다 arctan (-1 / 1). 즉., 당신은 얻을 것이다 -PI/4 왼쪽 위(180도 오프셋 필요)와 오른쪽 아래(그대로 괜찮음)에 대해 라디안 또는 -45도입니다.표시에 대한 테스트를 수행해야 합니다. delta_y delta_x 결과가 있는지 확인하기 위해 arctan 조정이 필요합니다.

전에 솔루션을 코딩하려면 테스트도 코딩하여 호출하는 함수가 예상 값을 생성하는지 확인해야 합니다.

다른 팁

나는 공감한다 ndim.한 지점에서 다른 지점으로의 방향을 계산하는 것은 쉽습니다.어떤 맥락에서 선의 방향을 원해야 하는지 이해하지 못합니다.이것은 매핑 응용 프로그램입니까?도로가 있고 도로 구간의 중간 쯤에 측면에 어떤 지점이 있습니까?

선분의 "북쪽", "NE" 또는 "동쪽"이 실제로 의미하는 바가 무엇인지는 불분명합니다.

"북쪽", "동쪽" 또는 "NE"와 같은 방향은 일반적으로 다른(기준) 지점을 기준으로 한 지점의 위치를 ​​설명하는 데 사용됩니다.기준점으로 사용하는 선분의 ​​점은 무엇입니까?

편집하다: 이제 끝점을 사용하겠다고 말했으므로 (x2,y2) 나침반의 중심점인 한 점 (x,y) 델타 벡터를 검사하여 나침반을 기준으로 위치를 지정합니다. (x-x2,y-y2).

메소드 사용에 대해 추론하기 쉽습니다. atan2() 델타 벡터에 대해 다음에서 반환된 각도를 고려합니다. atan2().

그러나 인수를 다음과 비교하는 것도 좋은 생각일 수 있습니다. atan2() 서로에게 결과 각도 범위를 결정합니다.이것은 기본적으로 전화를 피합니다. atan2() 컴파일 타임(또는 그 이전)에 일부 계산을 수행해야 하는 대신 런타임에.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top