RosettaCodeData/Task/Angles-geometric-normalizat.../FutureBasic/angles-geometric-normalizat...

101 lines
4.2 KiB
Plaintext

include "NSLog.incl"
double local fn Normalize( f as double, n as double )
double a = f
while ( a < -n ) : a += n : wend
while ( a >= n ) : a -= n : wend
end fn = a
double local fn NormalizeToDegrees( f as double ) return fn Normalize( f, 360 ) end fn = 0.0
double local fn NormalizeToGradians( f as double ) return fn Normalize( f, 400 ) end fn = 0.0
double local fn NormalizeToMils( f as double ) return fn Normalize( f, 6400 ) end fn = 0.0
double local fn NormalizeToRadians( f as double ) return fn Normalize( f, 2 * M_PI ) end fn = 0.0
double local fn d2g( f as double ) return f * 10 / 9 end fn = 0.0
double local fn d2m( f as double ) return f * 160 / 9 end fn = 0.0
double local fn d2r( f as double ) return f * M_PI / 180 end fn = 0.0
double local fn g2d( f as double ) return f * 9 / 10 end fn = 0.0
double local fn g2m( f as double ) return f * 16 end fn = 0.0
double local fn g2r( f as double ) return f * M_PI / 200 end fn = 0.0
double local fn m2d( f as double ) return f * 9 / 160 end fn = 0.0
double local fn m2g( f as double ) return f / 16 end fn = 0.0
double local fn m2r( f as double ) return f * M_PI / 3200 end fn = 0.0
double local fn r2d( f as double ) return f * 180 / M_PI end fn = 0.0
double local fn r2g( f as double ) return f * 200 / M_PI end fn = 0.0
double local fn r2m( f as double ) return f * 3200 / M_PI end fn = 0.0
local fn CalculateDegrees
CFArrayRef angles = @[@-2, @-1, @0, @1, @2, @6.2831853, @16, @57.2957795, @359, @6399, @1000000]
double angle, degrees, gradians, mils, radians
NSUInteger i
CFStringRef unit
CFStringRef dashpad = fn StringByPaddingToLength( @"", 73, @"-", 0 )
ptr anglePtr = fn StringUTF8String( @"Angle" )
ptr unitPtr = fn StringUTF8String( @"Unit" )
ptr normalPtr = fn StringUTF8String( @"Normalized" )
ptr gradiansPtr = fn StringUTF8String( @"Gradians" )
ptr milsPtr = fn StringUTF8String( @"Mils" )
ptr radiansPtr = fn StringUTF8String( @"Radians" )
// Header
NSLog( @"\n%@", dashpad )
NSLog( @"%13s %5s %15s %10s %7s %15s", anglePtr, unitPtr, normalPtr, gradiansPtr, milsPtr, radiansPtr )
NSLog( @"%@", dashpad )
// Degrees
for i = 0 to fn ArrayCount( angles ) - 1
angle = dblval( angles[i] )
unit = @"Degrees"
degrees = fn NormalizeToDegrees( angle )
gradians = fn NormalizeToGradians( fn d2g( degrees ) )
mils = fn NormalizeToMils( fn d2m( degrees ) )
radians = fn NormalizeToRadians( fn d2r( degrees ) )
NSLog( @"%13.4f %-10s % -12.4f % -11.4f % -12.4f % -13.4f", angle, fn StringUTF8String( unit ), degrees, gradians, mils, radians )
next
NSLog( @"" )
// Gradians
for i = 0 to fn ArrayCount( angles ) - 1
angle = dblval( angles[i] )
unit = @"Gradians"
gradians = fn NormalizeToGradians( angle )
degrees = fn NormalizeToDegrees( fn g2d( gradians ) )
mils = fn NormalizeToMils( fn g2m( gradians ) )
radians = fn NormalizeToRadians( fn g2r( gradians ) )
NSLog( @"%13.4f %-10s % -12.4f % -11.4f % -12.4f % -13.4f", angle, fn StringUTF8String( unit ), degrees, gradians, mils, radians )
next
NSLog( @"" )
// Mils
for i = 0 to fn ArrayCount( angles ) - 1
angle = dblval( angles[i] )
unit = @"Mils"
mils = fn NormalizeToMils( angle )
degrees = fn NormalizeToDegrees( fn m2d( mils ) )
gradians = fn NormalizeToGradians( fn m2g( mils ) )
radians = fn NormalizeToRadians( fn m2r( mils ) )
NSLog( @"%13.4f %-10s % -12.4f % -11.4f % -12.4f % -13.4f", angle, fn StringUTF8String( unit ), degrees, gradians, mils, radians )
next
NSLog( @"" )
// Radians
for i = 0 to fn ArrayCount( angles ) - 1
angle = dblval( angles[i] )
unit = @"Radians"
radians = fn NormalizeToRadians( angle )
degrees = fn NormalizeToDegrees( fn r2d( radians ) )
gradians = fn NormalizeToGradians( fn r2g( radians ) )
mils = fn NormalizeToMils( fn r2m( radians ) )
NSLog( @"%13.4f %-10s % -12.4f % -11.4f % -12.4f % -13.4f", angle, fn StringUTF8String( unit ), degrees, gradians, mils, radians )
next
NSLog( @"%@", dashpad )
end fn
fn CalculateDegrees
HandleEvents