46 lines
1.2 KiB
ObjectPascal
46 lines
1.2 KiB
ObjectPascal
program anglebearings(output);
|
|
(* Angle difference between two bearings *)
|
|
|
|
function rmod(x1, x2: real): real;
|
|
begin
|
|
rmod := x1 - trunc(x1 / x2) * x2;
|
|
end;
|
|
|
|
function getdiff(b1, b2: real): real;
|
|
var
|
|
r: real;
|
|
begin
|
|
r := rmod((b2 - b1), 360.0);
|
|
if r >= 180.0 then
|
|
r := r - 360.0;
|
|
if r < -180.0 then
|
|
r := r + 360.0;
|
|
getdiff := r;
|
|
end;
|
|
|
|
procedure writerow(b1, b2: real);
|
|
begin
|
|
writeln(b1: 14, ' ', b2: 14, ' ', getdiff(b1, b2):14);
|
|
end;
|
|
|
|
begin
|
|
writeln('Input in -180 to +180 range');
|
|
writeln(' Bearing 1 Bearing 2 Difference');
|
|
writerow(20.0, 45.0);
|
|
writerow(-45.0, 45.0);
|
|
writerow(-85.0, 90.0);
|
|
writerow(-95.0, 90.0);
|
|
writerow(-45.0, 125.0);
|
|
writerow(-45.0, 145.0);
|
|
writerow(-45.0, 125.0);
|
|
writerow(-45.0, 145.0);
|
|
writerow(29.4803, -88.6381);
|
|
writerow(-78.3251, -159.036);
|
|
writeln;
|
|
writeln('Input in wider range');
|
|
writeln(' Bearing 1 Bearing 2 Difference');
|
|
writerow(-70099.74233810938, 29840.67437876723);
|
|
writerow(-165313.6666297357, 33693.9894517456);
|
|
writerow(1174.8380510598456, -154146.66490124757);
|
|
writerow(60175.77306795546, 42213.07192354373)
|
|
end.
|