Angles (geometric), normalization and conversion: Difference between revisions

Content added Content deleted
(Added Delphi example)
Line 614: Line 614:
Mil | 1000000.0 | 90.0 | 100.0 | 1600.0 | 1.5707963267949
Mil | 1000000.0 | 90.0 | 100.0 | 1600.0 | 1.5707963267949
Rad | 1000000.0 | 339.51308232088 | 377.23675813431 | 6035.7881301489 | 5.9256211400939</pre>
Rad | 1000000.0 | 339.51308232088 | 377.23675813431 | 6035.7881301489 | 5.9256211400939</pre>
=={{header|Delphi}}==
{{libheader| System.SysUtils}}
{{libheader| System.Math}}
{{Trans|Go}}
<lang Delphi>
program normalization_and_conversion;

{$APPTYPE CONSOLE}

uses
System.SysUtils,
System.Math;

function d2d(d: double): double;
begin
result := FMod(d, 360);
end;

function g2g(g: double): double;
begin
result := FMod(g, 400);
end;

function m2m(m: double): double;
begin
result := FMod(m, 6400);
end;

function r2r(r: double): double;
begin
result := FMod(r, 2 * Pi);
end;

function d2g(d: double): double;
begin
result := d2d(d) * 400 / 360;
end;

function d2m(d: double): double;
begin
result := d2d(d) * 6400 / 360;
end;

function d2r(d: double): double;
begin
result := d2d(d) * Pi / 180;
end;

function g2d(g: double): double;
begin
result := g2g(g) * 360 / 400;
end;

function g2m(g: double): double;
begin
result := g2g(g) * 6400 / 400;
end;

function g2r(g: double): double;
begin
result := g2g(g) * Pi / 200;
end;

function m2d(m: double): double;
begin
result := m2m(m) * 360 / 6400;
end;

function m2g(m: double): double;
begin
result := m2m(m) * 400 / 6400;
end;

function m2r(m: double): double;
begin
result := m2m(m) * Pi / 3200;
end;

function r2d(r: double): double;
begin
result := r2r(r) * 180 / Pi;
end;

function r2g(r: double): double;
begin
result := r2r(r) * 200 / Pi;
end;

function r2m(r: double): double;
begin
result := r2r(r) * 3200 / Pi;
end;

function s(f: double): string;
begin
var wf := FloatToStrF(f, ffGeneral, 16, 64).Split([FormatSettings.DecimalSeparator], TStringSplitOptions.ExcludeEmpty);
if Length(wf) = 1 then
exit(format('%7s ', [wf[0]]));
var le := length(wf[1]);
if le > 7 then
le := 7;
Result := format('%7s.%-7s', [wf[0], copy(wf[1], 0, le)]);
end;

begin
var angles: TArray<Double> := [-2, -1, 0, 1, 2, 6.2831853, 16, 57.2957795, 359,
399, 6399, 1000000];

var ft := '%s %s %s %s %s';

writeln(format(ft, [' degrees ', 'normalized degs', ' gradians ',
' mils ', ' radians']));
for var a in angles do
writeln(format(ft, [s(a), s(d2d(a)), s(d2g(a)), s(d2m(a)), s(d2r(a))]));

writeln(format(ft, [#10' gradians ', 'normalized grds', ' degrees ',
' mils ', ' radians']));

for var a in angles do
writeln(format(ft, [s(a), s(g2g(a)), s(g2d(a)), s(g2m(a)), s(g2r(a))]));

writeln(format(ft, [#10' mils ', 'normalized mils', ' degrees ',
' gradians ', ' radians']));
for var a in angles do
writeln(format(ft, [s(a), s(m2m(a)), s(m2d(a)), s(m2g(a)), s(m2r(a))]));

writeln(format(ft, [#10' radians ', 'normalized rads', ' degrees ',
' gradians ', ' mils ']));
for var a in angles do
writeln(format(ft, [s(a), s(r2r(a)), s(r2d(a)), s(r2g(a)), s(r2m(a))]));
readln;
end.</lang>


=={{header|Factor}}==
=={{header|Factor}}==