Rebol3 Code Examplex
Angle difference between two bearings
Find the smallest angular gap between the two directions, treating the bearings as circular values from 0 to 360 degrees.
Rebol [
title: "Rosetta code: Angle difference between two bearings"
file: %Angle_difference_between_two_bearings.r3
url: https://rosettacode.org/wiki/Angle_difference_between_two_bearings
]
angle-diff: function [
"Returns shortest signed angular difference from b1 to b2 in degrees, range (-180, 180]."
b1 [integer! decimal!]
b2 [integer! decimal!]
][
angle: b2 - b1 % 360
case [
angle < -180 [ angle: angle + 360 ]
angle >= 180 [ angle: angle - 360 ]
]
angle
]
foreach [b1 b2] [
20.00 45.00 ;= 25.00
-45.00 45.00 ;= 90.00
-85.00 90.00 ;= 175.00
-95.00 90.00 ;= -175.00
-45.00 125.00 ;= 170.00
-45.00 145.00 ;= -170.00
29.48 -88.64 ;= -118.12
-78.33 -159.04 ;= -80.71
-70099.74 29840.67 ;= -139.58
-165313.67 33693.99 ;= -72.34
1174.84 -154146.66 ;= -161.50
60175.77 42213.07 ;= 37.30
][
printf ["b1: " 12 " b2: " 12 "angle diff b2 - b1 = " /green -6.1 /reset][
b1 b2 angle-diff b1 b2
]
]Output:
b1: 20.0 b2: 45.0 angle diff b2 - b1 = 25.0
b1: -45.0 b2: 45.0 angle diff b2 - b1 = 90.0
b1: -85.0 b2: 90.0 angle diff b2 - b1 = 175.0
b1: -95.0 b2: 90.0 angle diff b2 - b1 = -175.0
b1: -45.0 b2: 125.0 angle diff b2 - b1 = 170.0
b1: -45.0 b2: 145.0 angle diff b2 - b1 = -170.0
b1: 29.48 b2: -88.64 angle diff b2 - b1 = -118.1
b1: -78.33 b2: -159.04 angle diff b2 - b1 = -80.7
b1: -70099.74 b2: 29840.67 angle diff b2 - b1 = -139.6
b1: -165313.67 b2: 33693.99 angle diff b2 - b1 = -72.3
b1: 1174.84 b2: -154146.66 angle diff b2 - b1 = -161.5
b1: 60175.77 b2: 42213.07 angle diff b2 - b1 = 37.3