Namespaces
Variants

std::atan2(std::valarray)

cppreference.net에서
 
 
 
 
헤더 <valarray>
template< class T > 
std::valarray<T> atan2( const std::valarray<T>& y, const std::valarray<T>& x );
에 정의됨 (1)
template< class T > 
std::valarray<T> atan2( const std::valarray<T>& y,
                        const typename std::valarray<T>::value_type& vx );
(2)
template< class T > 
std::valarray<T> atan2( const typename std::valarray<T>::value_type& vy,
                        const std::valarray<T>& x );
(3)

인수의 부호를 사용하여 사분면을 올바르게 결정하면서 y / x의 아크탄젠트를 계산합니다.

1) y와 x에서 대응하는 각 값 쌍에 대한 아크탄젠트를 계산합니다.

만약 x.size() != y.size()인 경우 동작은 정의되지 않습니다.

2) vx와 숫자 배열 y의 각 값에 대한 아크탄젠트를 계산합니다.
3) vy와 숫자 배열 x의 각 값에 대한 아크탄젠트를 계산합니다.

매개변수

x, y - 역탄젠트를 계산할 숫자 배열
vy, vx - 역탄젠트를 계산할 값

반환값

역탄젠트 계산 결과를 포함하는 숫자 배열.

참고 사항

계산을 수행하기 위해 정규화되지 않은 함수 (atan2)가 사용됩니다. 그러한 함수를 사용할 수 없는 경우, std::atan2가 인수 종속 조회로 인해 사용됩니다.

함수는 std::valarray와 다른 반환 형식으로 구현될 수 있습니다. 이 경우 대체 형식은 다음 속성을 갖습니다:

  • 모든 const멤버 함수는 std::valarray에서 제공됩니다.
  • std::valarray, std::slice_array, std::gslice_array, std::mask_array 및 std::indirect_array는 대체 형식으로부터 생성될 수 있습니다.
  • 모든 함수가 하나의 const std::valarray<T>& 를 인자로 취할 때 (단, begin() 및 end()(C++11부터)는 제외), 대체 형식을 취하는 동일한 함수가 추가되어야 합니다.
  • 모든 함수가 두 개의 const std::valarray<T>& 인자를 취할 때, const std::valarray<T>&와 대체 형식의 모든 조합을 취하는 동일한 함수가 추가되어야 합니다.
  • 반환 형식은 가장 깊게 중첩된 인자 형식보다 템플릿 중첩 수준을 두 단계 이상 추가하지 않습니다.

예제

#include <algorithm>
#include <cmath>
#include <iomanip>
#include <iostream>
#include <valarray>
void show(char const* title, const std::valarray<double>& va)
{
    std::cout << title << ' ';
    std::for_each(std::begin(va), std::end(va), [](const double x)
    { 
        std::cout << ' ' << std::right << std::setw(4) << x << "°";
    });
    std::cout << '\n';
}
const double pi = std::acos(-1.0); // C++20: std::numbers::pi
int main()
{
    auto degrees_to_radians = [](double const& x) { return (pi * x / 180); };
    auto radians_to_degrees = [](double const& x) { return (180 * x / pi); };
    const std::valarray<double> degrees{-90, -60, -45, -30, 0, 30, 45, 60, 90};
    const std::valarray<double> radians = degrees.apply(degrees_to_radians);
    const auto sin = std::sin(radians);
    const auto cos = std::cos(radians);
    show("(1)", std::atan2(sin, cos).apply(radians_to_degrees));
    show("(2)", std::atan2(sin/cos, 1.0).apply(radians_to_degrees));
    show("(3)", std::atan2(1.0, cos/sin).apply(radians_to_degrees));
}

출력:

(1)   -90°  -60°  -45°  -30°    0°   30°   45°   60°   90°
(2)   -90°  -60°  -45°  -30°    0°   30°   45°   60°   90°
(3)    90°  120°  135°  150°    0°   30°   45°   60°   90°

결함 보고서

다음 동작 변경 결함 보고서는 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 3074 C++98 T 가 스칼라와 valarray 모두에서 추론되어 (2,3) 혼합 타입 호출이 허용되지 않음 valarray 에서만 T 를 추론

참고 항목

valarray의 각 요소에 std::asin 함수를 적용합니다
(함수 템플릿)
valarray의 각 요소에 std::acos 함수를 적용합니다
(함수 템플릿)
valarray의 각 요소에 std::atan 함수를 적용합니다
(함수 템플릿)
(C++11) (C++11)
부호를 사용하여 사분면을 결정하는 아크 탄젠트
(함수)
위상각을 반환합니다
(함수 템플릿)