답변:
std::atan2
4 사분면의 아크 탄젠트를 계산할 수 있습니다. std::atan
사분면 1과 4에서만 계산할 수 있습니다.
학교 수학에서 접선에 정의가 있음을 알고 있습니다
tan(α) = sin(α) / cos(α)
함수에 공급하는 각도에 따라 4 사분면을 구분합니다. 다음은의 기호 sin
, cos
그리고 tan
(우리의 정확한 배수를 무시 다음과 같은 관계가 π/2
) :
Quadrant Angle sin cos tan
-------------------------------------------------
I 0 < α < π/2 + + +
II π/2 < α < π + - -
III π < α < 3π/2 - - +
IV 3π/2 < α < 2π - + -
값 tan(α)
이 양수인 경우 각도가 1 사분면과 3 사분면 중 어느 것인지를 구분할 수 없으며 음수이면 2 사분면이나 4 사분면에서 나올 수 있습니다. 따라서 관례 적으로 접선에 대한 원래 입력에 관계없이 atan()
1 사분면 또는 4 사분면 (예 :)에서 각도를 반환합니다 -π/2 <= atan() <= π/2
.
전체 정보를 다시 얻으려면 나누기 결과를 사용해서는 sin(α) / cos(α)
안되지만 사인과 코사인 값을 별도로 살펴 봐야합니다. 그리고 이것이하는 일 atan2()
입니다. 이것은 양쪽의 소요 sin(α)
및 cos(α)
및 추가로 네 개의 사분면을 해결 π
의 결과 atan()
코사인이 부정 될 때마다.
참고 : 이 atan2(y, x)
함수는 실제로 a y
및 x
인수를 사용합니다. 이는 y 축 및 x 축에 길이 v
와 각도 가있는 벡터의 투영입니다.α
y = v * sin(α)
x = v * cos(α)
관계를 제공합니다
y/x = tan(α)
결론 :
atan(y/x)
일부 정보가 보류되며 입력이 사분면 I 또는 IV에서 온 것으로 가정 할 수 있습니다. 반대로 atan2(y,x)
모든 데이터를 가져 오므로 올바른 각도를 확인할 수 있습니다.
atan (x) x의 아크 탄젠트의 주요 값을 라디안으로 표시합니다.
atan2 (y, x) y / x의 아크 탄젠트의 주요 값을 라디안으로 표시합니다.
부호 모호성으로 인해, 함수는 각도가 접선 값 (아탄 단독)만큼만 떨어지는 사분면을 확실하게 결정할 수 없습니다. 사분면을 결정해야하는 경우 atan2를 사용할 수 있습니다.
(-pi,pi]
있지만 atan2에는 범위가 [-pi,pi]
있으므로 for -pi
로 인해 다른 분기의 추가 값 하나가 포함됩니다 . atan2(-0.0,x)
x<0
주된 질문은 "하나를 사용해야 할 때", "어떻게 사용해야합니까"또는 "올바른 것을 사용해야합니까?"
중요한 점은 atan만이 시거리 벡터와 같이 오른쪽 방향 곡선으로 양수 값을 공급하기위한 것입니다. Cero는 항상 왼쪽 하단에 있으며 티그는 느리거나 빠르게 올라갈 수 있습니다. atan은 음수를 반환하지 않으므로 결과를 더하거나 빼는 것만으로도 화면에서 4 가지 방향으로 사물을 추적 할 수 없습니다.
atan2는 원점이 중간에 있도록하기위한 것이며 사물이 뒤로 또는 아래로 갈 수 있습니다. 화면 표시에 사용하는 것이 곡선의 방향에 관계가 있기 때문입니다. 따라서 atan2는 cero가 중앙에 있기 때문에 음수를 줄 수 있으며 결과는 4 방향으로 물건을 추적하는 데 사용할 수 있습니다.
직각 삼각형을 고려하십시오. 우리는 빗변 r, 수평면 y 및 수직면 x라고 표시합니다. 관심 각도 α는 x와 r 사이의 각도입니다.
C ++ atan2(y, x)
은 각도 α의 값을 라디안 단위로 제공합니다.
atan
y와 x가 아닌 y / x 만 알고 있거나 관심이있는 경우에만 사용됩니다. 따라서 p = y / x이면 α를 얻기 위해를 사용 atan(p)
합니다.
atan2
사분면을 결정하는 데 사용할 수 없습니다. 어떤 사분면 atan2
을 이미 알고 있는 경우에만 사용할 수 있습니다 ! 특히 양의 x와 y는 첫 번째 사분면, 양의 y와 음의 x, 두 번째 등을 의미합니다. atan
또는 atan2
단순히 양수 또는 음수를 반환합니다.
p=y/x
는 여전히 사용할 수 있습니다 atan2(p,1)
.
atan2(y,x)
직교 좌표를 극좌표로 변환하려는 경우 일반적으로 사용됩니다. 그것은 당신에게 각도를 줄 것입니다, sqrt(x*x+y*y)
또는 가능한 경우, hypot(y,x)
당신에게 크기를 줄 것입니다.
atan(x)
단순히 황갈색의 역수입니다. 당신이 사용할 필요가 귀찮은 경우 atan(y/x)
시스템이 제공하지 않기 때문에 atan2
, 당신의 징후에 대한 추가 검사 수행해야 x
하고 y
, 그리고 대한을 x=0
정확한 각도를 얻기 위해.
참고 : 두 인수가 모두 0 인 경우를 제외하고 및의 atan2(y,x)
모든 실제 값에 대해 정의 됩니다.y
x
ATAN2, 출력은 다음과 같습니다 -pi
< atan2(y,x)
< pi
와의 ATAN, 출력은 다음과 같습니다 -pi/2
< atan(y/x)
< pi/2
//이 분기를 고려하지 복용량.
당신이 간 방향 얻고 싶다면 0
및 2*pi
(높은 학교 수학 등), 우리는 ATAN2를 사용할 필요가 음의 값을 추가하기위한이 2*pi
사이에 최종 결과를 얻을 수 0
및 2*pi
.
명확하게 설명하는 Java 소스 코드는 다음과 같습니다.
System.out.println(Math.atan2(1,1)); //pi/4 in the 1st quarter
System.out.println(Math.atan2(1,-1)); //(pi/4)+(pi/2)=3*(pi/4) in the 2nd quarter
System.out.println(Math.atan2(-1,-1 ));//-3*(pi/4) and it is less than 0.
System.out.println(Math.atan2(-1,-1)+2*Math.PI); //5(pi/4) in the 3rd quarter
System.out.println(Math.atan2(-1,1 ));//-pi/4 and it is less than 0.
System.out.println(Math.atan2(-1,1)+2*Math.PI); //7*(pi/4) in the 4th quarter
System.out.println(Math.atan(1 ));//pi/4
System.out.println(Math.atan(-1 ));//-pi/4
-π/2 <= atan() <= π/2
실제로pi/2
사분면 II의 한 점 ( )을 포함 합니다.