필터 지우기
필터 지우기

converting atan2 output to 360 deg

조회 수: 131 (최근 30일)
shobhit mehrotra
shobhit mehrotra 2015년 4월 13일
댓글: Stephen23 2024년 4월 13일
Hi, I'm using the function atan2, however my output is from -180 to 180 degrees (I converted from radians) How do I modify it such that it outputs a value from 0-360 degrees?
winddir = (atan2(Vi,Ui))*(180/pi);
  댓글 수: 1
Image Analyst
Image Analyst 2015년 4월 13일
There is an atan2d() function you know. All the functions have "d" versions that work in degrees instead of radians. Though it goes from -180 to +180.

댓글을 달려면 로그인하십시오.

채택된 답변

John D'Errico
John D'Errico 2015년 4월 14일
편집: John D'Errico 2015년 4월 14일
Since it will be periodic, just add 360 if the value is less than 0. This will suffice to correct the negative angles.
winddir = winddir + (winddir < 0)*360;
You can use atan2d if you prefer to work in degrees, but it will map to the same range, [-180,180], so you will still need to correct for the negative angles.
If you wanted a simple expression that works in one line of code, this should do:
winddir = atan2d(Vi,Ui) + 360*(Vi<0);

추가 답변 (2개)

Stephen23
Stephen23 2022년 5월 30일
편집: Stephen23 2022년 5월 30일
The simple, robust, and efficient solution is to use MOD:
mod(atan2d(Y,X),360)
  댓글 수: 2
Sam Ruegsegger
Sam Ruegsegger 2024년 4월 12일
Stephen23,
I am writing to you to thank you for your robust and simple solution. In the midst of a mehatronics lab, trial after trial went by, and my team still could not find a working solution. Despair was creeping in. And then we met you. Your solution has given us a bulwark against the demons of MATLAB. You may have written this 2 years ago, but your legacy lives on in the MathWorks chat room.
Godspeed, brother.
Stephen23
Stephen23 2024년 4월 13일
@Sam Ruegsegger: you can also vote for answers that helped you. It is an easy way to show your appreciation.

댓글을 달려면 로그인하십시오.


theodore panagos
theodore panagos 2018년 11월 7일
You can use the formula:
atan(x,y)=180/pi()*(pi()-p()/2*(1+sign(x))*(1-sign(y^2))-pi()/4*(2+sign(x))*sign(y)
-sign(x*y)*atan((abs(x)-abs(y))/(abs(x)+abs(y))))
That formula give the angle from 0 to 360 degrees for any value of x and y.
x=x2-x1 and y=y2-y1
For x=y=0 the result is undefined.
  댓글 수: 2
theodore panagos
theodore panagos 2018년 11월 7일
In the formula put pi()/2 instead p()/2
Nicolas soto vallejos
Nicolas soto vallejos 2022년 5월 30일
Have to say this formula is awsome if you only need to know what quarternal direction the vector is traveling in you could just use the first part. sure only returns in 45 deg but it makes it easier to work with and ofcourse you could allways use the entire thing if you need exact angles but i'm amazed at the brillians of this formula 10/10!

댓글을 달려면 로그인하십시오.

태그

Community Treasure Hunt

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

Start Hunting!

Translated by