Validate maximum difference between two angles: Difference between revisions
Added tutorial for something that was doing my head in last night |
(No difference)
|
Revision as of 08:01, 6 April 2021
In this example code, we will validate that angle A does not exceed angle B by 512 units. If it does, RETURN is set to 1. It assumes temp, temp2 and temp3 variables are declared. The tricky part in this comparison is that angles wrap back around to 0 when reaching 2048, this must be taken into account when comparing angle difference.
var MAX_ANGLE_DIFF 0 2
var ANGLE_A 0 2
var ANGLE_B
defstate check_max_angle_diff
set temp2 ANGLE_B
sub temp2 MAX_ANGLE_DIFF
set temp3 ANGLE_B
add temp3 MAX_ANGLE_DIFF
ifl temp2 0
add temp2 2048
ifge temp3 2048
sub temp3 2048
set temp 0
set RETURN 0
ifl temp3 temp2
{
// we wrapped around the 0/2048 line, either case is enough
ifl ANGLE_A temp3
set temp 1
else ifg ANGLE_A temp2
set temp 1
}
else
{
// we didn't wrap around so needs to be inbetween [temp2-temp3]
ifge ANGLE_A temp2
ifle ANGLE_A temp3
set temp 1
}
ife temp 1
set RETURN 0
else
set RETURN 1
ends