Namespaces
Variants

std::atan2(std::valarray)

De fr.cppreference.net
 
 
 
 
Défini dans l'en-tête <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)

Calcule l'arc tangente de y / x en utilisant les signes des arguments pour déterminer correctement le quadrant.

1) Calcule l'arc tangente de chaque paire de valeurs correspondantes de y et x.

Le comportement est indéfini si x.size() != y.size().

2) Calcule l'arc tangente de vx et chaque valeur du tableau numérique y.
3) Calcule l'arc tangente de vy et chaque valeur du tableau numérique x.

Paramètres

x, y - tableaux numériques pour calculer l'arc tangente
vy, vx - valeurs pour calculer l'arc tangente

Valeur de retour

Un tableau numérique contenant les résultats du calcul de l'arc tangente.

Notes

Une fonction non qualifiée (atan2) est utilisée pour effectuer le calcul. Si une telle fonction n'est pas disponible, std::atan2 est utilisé en raison de la recherche dépendante des arguments.

La fonction peut être implémentée avec un type de retour différent de std::valarray. Dans ce cas, le type de remplacement possède les propriétés suivantes :

  • Toutes les constfonctions membres de std::valarray sont fournies.
  • std::valarray, std::slice_array, std::gslice_array, std::mask_array et std::indirect_array peuvent être construits à partir du type de remplacement.
  • Pour chaque fonction prenant un const std::valarray<T>& sauf begin() et end()(depuis C++11), des fonctions identiques prenant les types de remplacement doivent être ajoutées ;
  • Pour chaque fonction prenant deux const std::valarray<T>& arguments, des fonctions identiques prenant toutes les combinaisons de const std::valarray<T>& et de types de remplacement doivent être ajoutées.
  • Le type de retour n'ajoute pas plus de deux niveaux d'imbrication de templates par rapport au type d'argument le plus profondément imbriqué.

Exemple

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

Sortie :

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

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR S'applique à Comportement publié Comportement corrigé
LWG 3074 C++98 T est déduit à la fois du scalaire et du valarray pour (2,3) , empêchant les appels de types mixtes déduire uniquement T à partir du valarray

Voir aussi

applique la fonction std::asin à chaque élément du valarray
(modèle de fonction)
applique la fonction std::acos à chaque élément du valarray
(modèle de fonction)
applique la fonction std::atan à chaque élément du valarray
(modèle de fonction)
(C++11) (C++11)
arc tangente, utilisant les signes pour déterminer les quadrants
(fonction)
retourne l'angle de phase
(modèle de fonction)