|
|
|
![]() |
|
|||||||
|
||||||||
|
|
Thread Tools | Rate Thread | Display Modes |
|
#4
|
||||
|
||||
|
Re: NavX MXP Continuous Angle to Calculate Derivative
Quote:
what you want is the shortest angle from the previous reading to the present reading, with the correct sign. The IEEERemainder function1 does this with one line of code: Code:
shortest_angle = IEEERemainder(present-previous,360); If your language does not support IEEERemainder, you can use this one-line function instead: Code:
shortest_angle = (present-previous) - 360*floor(0.5+(present-previous)/360); EDIT: Test code: Code:
#include <math.h>
#include <stdio.h>
double shortest_angle(double previous, double present){
return (present-previous) - 360.0*floor(0.5+(present-previous)/360.0);}
void test(double previous, double present){
printf("previous=%f\tpresent=%f\tshortest_angle=%f\n",previous,present,shortest_angle(previous,present));
}
void main(void){
test(360,0);
test(0,360);
test(360,1);
test(1,360);
test(359,0);
test(0,359);
test(1,359);
test(359,1);
test(359,-1);
test(-1,359);
test(3*360+1,-1);
test(-1,3*360+1);
}
Code:
previous=360.000000 present=0.000000 shortest_angle=0.000000 previous=0.000000 present=360.000000 shortest_angle=0.000000 previous=360.000000 present=1.000000 shortest_angle=1.000000 previous=1.000000 present=360.000000 shortest_angle=-1.000000 previous=359.000000 present=0.000000 shortest_angle=1.000000 previous=0.000000 present=359.000000 shortest_angle=-1.000000 previous=1.000000 present=359.000000 shortest_angle=-2.000000 previous=359.000000 present=1.000000 shortest_angle=2.000000 previous=359.000000 present=-1.000000 shortest_angle=0.000000 previous=-1.000000 present=359.000000 shortest_angle=0.000000 previous=1081.000000 present=-1.000000 shortest_angle=-2.000000 previous=-1.000000 present=1081.000000 shortest_angle=2.000000 Last edited by Ether : 12-05-2016 at 13:29. Reason: added test code and output |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|