valarray atan2() function in C++

The atan2() function is defined in valarray header file. This function calculate inverse tangent of (y/x) value of each element in valarray and returns a valarray containing the inverse tangent of all the elements. where y is the proportion of the y-coordinate and x is the proportion of the x-coordinate.

Syntax:

std::valarray res = atan2 (y-coords, x-coords)

Parameters:The function accepts two mandatory parameters which are X-coords and Y-coords.

Note: If both parameter are valarray objects and their sizes not match, then they behavior as undefined.

Returns: This function returns a valarray containing the inverse tangent of all the elements.



Below programs illustrate the above function:

Example 1:-

filter_none

edit
close

play_arrow

link
brightness_4
code

// atan2 valarray example
// programs illustrate the atan2() function:
  
#include <iostream>
#include <valarray>
using namespace std;
  
int main()
{
    // intilaize both the array X and Y coords
    double y[] = { 0.0, 3.0, -2.0 };
    double x[] = { -3.0, 3.0, -1.0 };
  
    // intilaize both the valarray X and Y coords
    valarray<double> ycoords(y, 3);
    valarray<double> xcoords(x, 3);
  
    // store results in valarray res
    valarray<double> res = atan2(ycoords, xcoords);
  
    // print results of atan2() function
    cout << "results:";
    for (size_t i = 0; i < res.size(); ++i)
        cout << ' ' << res[i];
    cout << '\n';
  
    return 0;
}

chevron_right


Output:

results: results: 3.14159 0.785398 -2.03444

Example 2:-

filter_none

edit
close

play_arrow

link
brightness_4
code

// atan2 valarray example
// programs illustrate the atan2() function:
  
#include <iostream>
#include <valarray>
using namespace std;
  
int main()
{
    // intilaize both the array X and Y coords
    double y[] = { 4.0, 5.6, -2.8, 7.3 };
    double x[] = { 5.0, -1.5, 7.0, -0.8 };
  
    // intilaize both the valarray X and Y coords
    valarray<double> ycoords(y, 4);
    valarray<double> xcoords(x, 4);
  
    // store results in valarray res
    valarray<double> res = atan2(ycoords, xcoords);
  
    // print results of atan2() function
    cout << "results:";
    for (size_t i = 0; i < res.size(); ++i)
        cout << ' ' << res[i];
    cout << '\n';
  
    return 0;
}

chevron_right


Output:

results: 0.674741 1.83251 -0.380506 1.67995

Example 3:- Errors and Exceptions: The function returns no matching function for call to error when valarray objects of different sizes are passed as an argument.

filter_none

edit
close

play_arrow

link
brightness_4
code

// atan2 valarray example
// programs illustrate the atan2() function:
  
#include <iostream>
#include <valarray>
using namespace std;
  
int main()
{
    // intilaize both the array X and Y coords
    double y[] = { -2.8, 7.3 };
    float x[] = { 5.0, -0.8, 3.2, 5, 1 };
  
    // intilaize both the valarray X and Y coords
    valarray<double> ycoords(y, 2);
    valarray<float> xcoords(x, 4);
  
    // store results in valarray res
    valarray<double> res = atan2(ycoords, xcoords);
  
    // print results of atan2() function
    cout << "results:";
    for (size_t i = 0; i < res.size(); ++i)
        cout << ' ' << res[i];
    cout << '\n';
  
    return 0;
}

chevron_right


Output:

prog.cpp: In function 'int main()':
prog.cpp:14:48: error: no matching function for call to 'atan2(std::valarray&, std::valarray&)'
   valarray res = atan2 (ycoords, xcoords);
                                                ^


My Personal Notes arrow_drop_up

Strategy Path planning and Destination matters in success No need to worry about in between temporary failures

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.