Namespaces
Variants

std::atan2(std::valarray)

De es.cppreference.net
 
 
 
 
Definido en el encabezado <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)

Calcula la tangente inversa de y / x usando los signos de los argumentos para determinar correctamente el cuadrante.

1) Calcula la tangente inversa de cada par de valores correspondientes de y y x.

El comportamiento no está definido si x.size() != y.size().

2) Calcula la tangente inversa de vx y cada valor en el arreglo numérico y.
3) Calcula la tangente inversa de vy y cada valor en el arreglo numérico x.

Parámetros

x, y - arreglos numéricos para calcular el arcotangente
vy, vx - valores para calcular el arcotangente

Valor de retorno

Un arreglo numérico que contiene los resultados del cálculo de arcotangente.

Notas

Se utiliza la función no calificada (atan2) para realizar el cómputo. Si dicha función no está disponible, se usa std::atan2 debido a la búsqueda dependiente de argumentos.

La función puede implementarse con un tipo de retorno diferente de std::valarray. En este caso, el tipo de reemplazo tiene las siguientes propiedades:

  • Todas las funciones miembro const de std::valarray se proporcionan.
  • std::valarray, std::slice_array, std::gslice_array, std::mask_array y std::indirect_array pueden construirse a partir del tipo de reemplazo.
  • Por cada función que toma un const std::valarray<T>& excepto begin() y end()(desde C++11), se deben agregar funciones idénticas que tomen los tipos de reemplazo;
  • Por cada función que toma dos const std::valarray<T>& argumentos, se deben agregar funciones idénticas que tomen cada combinación de const std::valarray<T>& y tipos de reemplazo.
  • El tipo de retorno no añade más de dos niveles de anidamiento de plantillas sobre el tipo de argumento más profundamente anidado.

Ejemplo

#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));
}

Salida:

(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°

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 3074 C++98 T se deduce tanto del escalar como del valarray para (2,3) , impidiendo llamadas de tipos mixtos deducir únicamente T del valarray

Véase también

aplica la función std::asin a cada elemento del valarray
(plantilla de función)
aplica la función std::acos a cada elemento del valarray
(plantilla de función)
aplica la función std::atan a cada elemento del valarray
(plantilla de función)
(C++11) (C++11)
arcotangente, usando signos para determinar cuadrantes
(función)
devuelve el ángulo de fase
(plantilla de función)