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

406 visualizzazioni (ultimi 30 giorni)
KA il 12 Giu 2011
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 CommentiMostra 1 commento meno recenteNascondi 1 commento meno recente
Stephen23 il 27 Ott 2018
See Daniel Svedbrand's answer for the simplest solution.

Accedi per commentare.

### Risposta accettata

Daniel Svedbrand il 14 Set 2018
Modificato: John D'Errico il 3 Ago 2023
Adding mod 2*pi to atan2 should work just fine
z = mod(atan2(y,x),2*pi);
##### 6 CommentiMostra 5 commenti meno recentiNascondi 5 commenti meno recenti
John D'Errico il 3 Ago 2023
Edited to remove profanity in the answer.

Accedi per commentare.

### Più risposte (4)

Walter Roberson il 12 Giu 2011
##### 5 CommentiMostra 4 commenti meno recentiNascondi 4 commenti meno recenti
KA il 12 Giu 2011
ok, did not know that, thanks again

Accedi per commentare.

Paulo Silva il 12 Giu 2011
The Wikipedia got all explained, you just need to do the code, it's very simple.
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 CommentiMostra 1 commento meno recenteNascondi 1 commento meno recente
Mehmet Can Türk il 9 Apr 2022
Modificato: Mehmet Can Türk il 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.

Accedi per commentare.

Kent Leung il 21 Mar 2018
Modificato: Kent Leung il 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 CommentoMostra NessunoNascondi Nessuno
Sharad Keshari il 26 Nov 2020

Accedi per commentare.

theodore panagos il 27 Ott 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 CommentoMostra NessunoNascondi Nessuno
theodore panagos il 6 Ago 2023
atan2(x,y)=pi/2*(1-sign(x))*(1-sgn(y^2))+pi()/4*(2-sgn(x))*sign(y)-sign(x*y)*atan((abs(x)-abs(y))/(abs(x)+abs(y)))

Accedi per commentare.

### Categorie

Scopri di più su Function Creation in Help Center e File Exchange

### Community Treasure Hunt

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

Start Hunting!