Angle difference between two bearings: Difference between revisions
Content added Content deleted
m (→{{header|REXX}}: changed the REXX program description comment.) |
m (→{{header|REXX}}: used more centering for a better display, used a template for the output section.) |
||
Line 977: | Line 977: | ||
=={{header|REXX}}== |
=={{header|REXX}}== |
||
Some extra coding was added for a better visual presentation; the angles were centered, the answers were aligned. |
|||
<lang rexx>/*REXX pgm calculates difference between two angles (in degrees), normalizes the result.*/ |
<lang rexx>/*REXX pgm calculates difference between two angles (in degrees), normalizes the result.*/ |
||
numeric digits 25 /*use enough |
numeric digits 25 /*use enough dec. digits for angles*/ |
||
call show 20, |
call show 20, 45 /*display angular difference (deg).*/ |
||
call show -45, |
call show -45, 45 /* " " " " */ |
||
call show -85, |
call show -85, 90 /* " " " " */ |
||
call show -95, |
call show -95, 90 /* " " " " */ |
||
call show -45, |
call show -45, 125 /* " " " " */ |
||
call show 45, |
call show 45, 145 /* " " " " */ |
||
call show 29.4803, |
call show 29.4803, -88.6361 /* " " " " */ |
||
call show -78.3251, |
call show -78.3251, -159.036 /* " " " " */ |
||
call show -70099.74233810938, 29840.67437876723 /* " |
call show -70099.74233810938, 29840.67437876723 /* " " " " */ |
||
call show -165313.6666297357, 33693.9894517456 /* " |
call show -165313.6666297357, 33693.9894517456 /* " " " " */ |
||
call show 1174.8380510598456,-154146.66490124757 /* " |
call show 1174.8380510598456, -154146.66490124757 /* " " " " */ |
||
call show 60175.773067955546, 42213.07192354373 /* " |
call show 60175.773067955546, 42213.07192354373 /* " " " " */ |
||
exit /*stick a fork in it, we're |
exit /*stick a fork in it, we're done. */ |
||
/*──────────────────────────────────────────────────────────────────────────────────────*/ |
/*──────────────────────────────────────────────────────────────────────────────────────*/ |
||
show: parse arg a,b; d=digits(); $='º' /*obtain the 2 angles (are in degrees).*/ |
show: parse arg a,b; d=digits(); $='º' /*obtain the 2 angles (are in degrees).*/ |
||
x=format( ( ( ((b-a) // 360) + 540) // 360) - 180, 4, d |
x=format( ( ( ((b-a) // 360) + 540) // 360) - 180, 4, d) /*compute and format. */ |
||
if pos(., x)\==0 then x=strip( strip(x, 'T', 0), "T", .) /*strip trailing chaff.*/ |
if pos(., x)\==0 then x=strip( strip(x, 'T', 0), "T", .) /*strip trailing chaff.*/ |
||
say center(a || $, d) '─' center(b || $, d) " |
say center(a || $, d) '─' center(b || $, d) " ────► " x || $ |
||
return /* [↑] display the angular difference.*/</lang> |
return /* [↑] display the angular difference.*/</lang> |
||
{{out|output}} |
|||
<pre> |
<pre> |
||
20º ─ 45º |
20º ─ 45º ────► 25º |
||
-45º ─ 45º |
-45º ─ 45º ────► 90º |
||
-85º ─ 90º |
-85º ─ 90º ────► 175º |
||
-95º ─ 90º |
-95º ─ 90º ────► -175º |
||
-45º ─ 125º |
-45º ─ 125º ────► 170º |
||
45º ─ 145º |
45º ─ 145º ────► 100º |
||
29.4803º ─ -88.6361º |
29.4803º ─ -88.6361º ────► -118.1164º |
||
-78.3251º ─ -159.036º |
-78.3251º ─ -159.036º ────► -80.7109º |
||
-70099.74233810938º ─ 29840.67437876723º |
-70099.74233810938º ─ 29840.67437876723º ────► -139.58328312339º |
||
-165313.6666297357º ─ 33693.9894517456º |
-165313.6666297357º ─ 33693.9894517456º ────► -72.3439185187º |
||
1174.8380510598456º ─ -154146.66490124757º |
1174.8380510598456º ─ -154146.66490124757º ────► -161.5029523074156º |
||
60175.773067955546º ─ 42213.07192354373º |
60175.773067955546º ─ 42213.07192354373º ────► 37.298855588184º |
||
</pre> |
</pre> |
||