Angle difference between two bearings: Difference between revisions

Added Algol 68
(→‎BQN: add)
(Added Algol 68)
 
(3 intermediate revisions by one other user not shown)
Line 864:
Difference between -154146.6649 and 1174.8381 is -161.5030
Difference between 42213.0719 and 60175.7731 is 37.2989
</pre>
 
=={{header|ALGOL 68}}==
{{Trans|11l}}
<syntaxhighlight lang="jalgol68">tests=: _99&".;._2 noun define
BEGIN # angle difference between 2 bearings - translated from the 11l sample #
 
PROC wrap = (REAL v, l1, l2 )REAL:
BEGIN
REAL result := v;
WHILE result < l1 DO result +:= 2 * l2 OD;
WHILE result > l2 DO result +:= 2 * l1 OD;
result
END # wrap # ;
PROC get_difference = ( REAL b1, b2 )REAL: wrap( b2 - b1, -180.0, 180.0 );
 
OP FMT = ( REAL v )STRING:
BEGIN
STRING result := fixed( ABS v, 0, 3 );
IF result[ LWB result ] = "." THEN "0" +=: result FI;
WHILE result[ UPB result ] = "0" DO result := result[ : UPB result - 1 ] OD;
IF result[ UPB result ] = "." THEN result := result[ : UPB result - 1 ] FI;
IF v < 0 THEN "-" ELSE " " FI + result
END # FMT # ;
 
print( ( FMT get_difference( 20.0, 45.0 ), newline ) );
print( ( FMT get_difference( -45.0, 45.0 ), newline ) );
print( ( FMT get_difference( -85.0, 90.0 ), newline ) );
print( ( FMT get_difference( -95.0, 90.0 ), newline ) );
print( ( FMT get_difference( -45.0, 125.0 ), newline ) );
print( ( FMT get_difference( -45.0, 145.0 ), newline ) );
print( ( FMT get_difference( -45.0, 125.0 ), newline ) );
print( ( FMT get_difference( -45.0, 145.0 ), newline ) );
print( ( FMT get_difference( 29.4803, -88.6381 ), newline ) );
print( ( FMT get_difference( -78.3251, -159.036 ), newline ) );
print( ( newline ) );
print( ( FMT get_difference( -70099.74233810938, 29840.67437876723 ), newline ) );
print( ( FMT get_difference( -165313.6666297357, 33693.9894517456 ), newline ) );
print( ( FMT get_difference( 1174.8380510598456, -154146.66490124757 ), newline ) );
print( ( FMT get_difference( 60175.77306795546, 42213.07192354373 ), newline ) )
 
END
</syntaxhighlight>
{{out}}
<pre>
25
90
175
-175
170
-170
170
-170
-118.118
-80.711
 
-139.583
-72.344
-161.503
37.299
</pre>
 
Line 893 ⟶ 954:
180
</pre>
 
=={{header|ARM Assembly}}==
{{works with|as|Raspberry Pi <br> or android 32 bits with application Termux}}
Line 1,735 ⟶ 1,797:
 
=={{header|BQN}}==
<syntaxhighlight lang="bqn">Adiff ← 180 +- ¯360 | 180 + -˜
 
tests ← [20‿45, ¯45 ‿4545‿45, ¯85 ‿9085‿90, ¯95 ‿9095‿90, ¯45 ‿12545‿125, ¯45 ‿14545‿145
99‿279, 29.4803‿¯88.6381, ¯78.3251‿¯159.036
¯70099.74233810938‿29840.67437876723
¯165313.6666297357‿33693.9894517456
Line 1,755 ⟶ 1,817:
¯45 125 170
¯45 145 ¯170
99 279 180
29.48 ¯88.638 ¯118.118
¯78.325 ¯159.036 ¯80.711
Line 3,064 ⟶ 3,127:
 
=={{header|J}}==
<syntaxhighlight lang="j">relativeBearing=: (180 -~ 360 | 180 + -~)/"1</syntaxhighlight>
 
tests=: _99&".;._2 noun define
<syntaxhighlight lang="j">relativeBearing=: (180 -~ 360 | 180 + -~)/"1</syntaxhighlight>
<syntaxhighlight lang="j">tests=: _99&".;._2 noun define
20 45
-45 45
Line 3,079 ⟶ 3,142:
1174.8380510598456 -154146.66490124757
60175.77306795546 42213.07192354373
)</syntaxhighlight>
)
 
<pre> tests ,. relativeBearing/"1 tests
20 45 25
_45 45 90
Line 3,092 ⟶ 3,156:
_165314 33694 _72.3439
1174.84 _154147 _161.503
60175.8 42213.1 37.2989</syntaxhighlightpre>
 
=={{header|Java}}==
3,028

edits