# Changing the atan function so that it ranges from 0 to 2*pi

480 views (last 30 days)

Show older comments

I know that the matlab atan function returns values in the range of -pi/2 to pi/2. How do i change it so that it goes over the full range 0 to 2*pi?

My first attempt was using a while loop, but it was incorrect.

I need to write a function mfile to set the built-in matlab function atan in the range of 0 to 2*pi without using atan2. im new to matlab so im unsure of what to do.

Thank you

##### 2 Comments

### Accepted Answer

Daniel Svedbrand
on 14 Sep 2018

Edited: John D'Errico
on 3 Aug 2023

Adding mod 2*pi to atan2 should work just fine

z = mod(atan2(y,x),2*pi);

##### 6 Comments

### More Answers (4)

Paulo Silva
on 12 Jun 2011

function v=myatan(y,x)

if nargin==1 %just in case the user only gives the value of y myatan(y)

x=1;

end

v=nan;

if x>0

v=atan(y/x);

end

if y>=0 & x<0

v=pi+atan(y/x);

end

if y<0 & x<0

v=-pi+atan(y/x);

end

if y>0 & x==0

v=pi/2;

end

if y<0 & x==0

v=-pi/2;

end

if v<0

v=v+2*pi;

end

end

##### 2 Comments

Mehmet Can Türk
on 9 Apr 2022

Edited: Mehmet Can Türk
on 9 Apr 2022

I checked the Wikipedia link and tested the code. First of all, thank you so much for the contribution.

I wanted to convert atan2 function from Matlab into another environment which supports only atan function. So I deleted the if block and everything worked perfectly.

Kent Leung
on 21 Mar 2018

Edited: Kent Leung
on 21 Mar 2018

Better late than never. (Also posting as a future reference to myself.) The function below accepts y & x as vectors in Matlab. Rather than using 'if' statements, the below might be faster if there is some parallelization implemented in the built-in index searching.

Note: I have a slight disagreement with the above for the x>0 & y<0 case, as well as the for x=0 & y<0 case. The code below gives 0 to 2pi.

function v=myatan(y,x)

%---returns an angle in radians between 0 and 2*pi for atan

v=zeros(size(x));

v(x>0 & y>=0) = atan( y(x>0 & y>=0) ./ x(x>0 & y>=0) );

v(x>0 & y<0) = 2*pi+atan( y(x>0 & y<0) ./ x(x>0 & y<0) );

v(x<0 & y>=0) = pi+atan( y(x<0 & y>=0) ./ x(x<0 & y>=0) );

v(x<0 & y<0) = pi+atan( y(x<0 & y<0) ./ x(x<0 & y<0) );

v(x==0 & y>=0) = pi/2;

v(x==0 & y<0) = 3/2*pi;

end

##### 1 Comment

theodore panagos
on 27 Oct 2018

You can use the formula:

atan(x,y)=pi-pi/2*(1+sgn(x))*(1-sgn(y^2))-pi/4*(2+sgn(x))*sgn(y) -sgn(x*y)*atan((abs(x)-abs(y))/(abs(x)+abs(y)))

x=x2-x1 and y=y2-y1

##### 1 Comment

theodore panagos
on 6 Aug 2023

### See Also

### Categories

### Products

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!