std::atan2(std::valarray)
| 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.
y y x.El comportamiento no está definido si x.size() != y.size().
vx y cada valor en el arreglo numérico y.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
constde 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 deconst 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) |