std::atan2(std::valarray)
| Definiert in Header <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) | |
Berechnet den Arkustangens vony / x unter Verwendung der Vorzeichen der Argumente, um den Quadranten korrekt zu bestimmen.
y undx.Das Verhalten ist undefiniert, wennx.size() != y.size().
vx und jedem Wert im numerischen Arrayy.vy und jedem Wert im numerischen Arrayx.Parameter
| x, y | - | numerische Arrays zur Berechnung des Arkustangens |
| vy, vx | - | Werte zur Berechnung des Arkustangens |
Rückgabewert
Ein numerisches Array, das die Ergebnisse der Berechnung des Arkustangens enthält.
Anmerkungen
Die unqualifizierte Funktion (atan2) wird zur Durchführung der Berechnung verwendet. Wenn eine solche Funktion nicht verfügbar ist, wird std::atan2 aufgrund von argumentabhängiger Suche verwendet.
Die Funktion kann mit einem von std::valarray unterschiedlichen Rückgabetyp implementiert werden. In diesem Fall hat der Ersatztyp die folgenden Eigenschaften:
- Alle
constElementfunktionen von std::valarray werden bereitgestellt. - std::valarray, std::slice_array, std::gslice_array, std::mask_array und std::indirect_array können aus dem Ersatztyp konstruiert werden.
- Für jede Funktion, die ein
const std::valarray<T>&außer begin() und end()(seit C++11) nimmt, sollen identische Funktionen, die die Ersatztypen nehmen, hinzugefügt werden; - Für jede Funktion, die zwei
const std::valarray<T>&Argumente nimmt, sollen identische Funktionen, die jede Kombination vonconst std::valarray<T>&und Ersatztypen nehmen, hinzugefügt werden. - Der Rückgabetyp fügt nicht mehr als zwei Ebenen von Template-Verschachtelung über dem am tiefsten verschachtelten Argumenttyp hinzu.
Beispiel
#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)); }
Ausgabe:
(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°
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 3074 | C++98 |
T
wird sowohl vom Skalar als auch vom
valarray
für
(2,3)
abgeleitet, was gemischte Typaufrufe verbietet
|
leite
T
nur vom
valarray
ab
|
Siehe auch
|
wendet die Funktion
std::asin
auf jedes Element des valarray an
(Funktions-Template) |
|
|
wendet die Funktion
std::acos
auf jedes Element des valarray an
(Funktions-Template) |
|
|
wendet die Funktion
std::atan
auf jedes Element des valarray an
(Funktions-Template) |
|
|
(C++11)
(C++11)
|
Arcustangens, verwendet Vorzeichen zur Quadrantenbestimmung
(Funktion) |
|
gibt den Phasenwinkel zurück
(Funktions-Template) |