Algorithm Request: Comparison against a range that wraps


Author Message
vegipete

Guru

Joined: 29/01/2013
Location: Canada
Posts: 1182
Posted: 05:55pm 25 Jun 2021      

There's some awesome ideas!

Jiri's version seems to be the hardest to break - I haven't been able to. I split it into 2 lines to simplify it slightly.
Phill's only works within the window. (Which suits my request.) His can't return an arbitrary difference.
TassyJim's only works 'forwards'. (359,1 is OK, 1,359 is not)

The neat thing is that all three have an underlying similarity. Plus they are more elegant than my brute force IF EVERYTHING method.

Thanks!

dim float old_angle, new_angle, diff
dim window = 10
do
input "both angles:", old_angle,new_angle

print "Phill99"
if (new_angle >= 360-window) AND (old_angle < window) then new_angle = new_angle - 360
if (old_angle >= 360-window) AND (new_angle < window) then old_angle = old_angle - 360
diff = abs(new_angle - old_angle)
print diff
print

print "TassyJim"
diff = new_angle-old_angle + 360
if diff >= 360 then diff = diff - 360
print diff
print

print "Jiri"
diff = max(old_angle,new_angle)-min(old_angle,new_angle)
diff = min(diff, 360-diff)
print diff
print

loop


Edit: might be able to simplify Jiri's some more:
diff = abs(old_angle - new_angle)
diff = min(diff, 360-diff)

Edited 2021-06-26 04:01 by vegipete