122 lines
3.7 KiB
Plaintext
122 lines
3.7 KiB
Plaintext
#define PI 3.1415926535897932384626433832795028842
|
|
#define INVALID -99999
|
|
|
|
function clamp( byval n as double, lo as double, hi as double ) as double
|
|
while n <= lo
|
|
n += (hi - lo)/2
|
|
wend
|
|
while n >= hi
|
|
n += (lo - hi)/2
|
|
wend
|
|
return n
|
|
end function
|
|
|
|
function anglenc( byval angle as double, byval source as string, byval targ as string ) as double
|
|
source = ucase(source)
|
|
targ = ucase(targ)
|
|
select case source
|
|
case "D":
|
|
angle = clamp(angle, -360, 360)
|
|
select case targ
|
|
case "D":
|
|
return angle
|
|
case "G":
|
|
return angle*10/9
|
|
case "M":
|
|
return angle*160/9
|
|
case "R":
|
|
return angle*PI/180
|
|
case "T":
|
|
return angle/360
|
|
case else
|
|
return INVALID
|
|
end select
|
|
case "G":
|
|
angle = clamp(angle, -400, 400)
|
|
select case targ
|
|
case "D":
|
|
return angle*9/10
|
|
case "G":
|
|
return angle
|
|
case "M":
|
|
return angle*16
|
|
case "R":
|
|
return angle*PI/200
|
|
case "T":
|
|
return angle/400
|
|
case else
|
|
return INVALID
|
|
end select
|
|
case "M":
|
|
angle = clamp(angle, -6400, 6400)
|
|
select case targ
|
|
case "D":
|
|
return angle*9/160
|
|
case "G":
|
|
return angle/16
|
|
case "M":
|
|
return angle
|
|
case "R":
|
|
return angle*PI/3200
|
|
case "T":
|
|
return angle/6400
|
|
case else
|
|
return INVALID
|
|
end select
|
|
case "R":
|
|
angle = clamp(angle, -2*PI, 2*PI)
|
|
select case targ
|
|
case "D":
|
|
return angle*180/PI
|
|
case "G":
|
|
return angle*200/PI
|
|
case "M":
|
|
return angle*3200/PI
|
|
case "R":
|
|
return angle
|
|
case "T":
|
|
return angle/(2*PI)
|
|
case else
|
|
return INVALID
|
|
end select
|
|
case "T":
|
|
angle = clamp(angle, -1, 1)
|
|
select case targ
|
|
case "D":
|
|
return angle*360
|
|
case "G":
|
|
return angle*400
|
|
case "M":
|
|
return angle*6400
|
|
case "R":
|
|
return angle*2*PI
|
|
case "T":
|
|
return angle
|
|
case else
|
|
return INVALID
|
|
end select
|
|
case else:
|
|
return INVALID
|
|
end select
|
|
end function
|
|
|
|
function clip( st as string, num as uinteger ) as string
|
|
if len(st)<num then return st
|
|
return left(st, num)
|
|
end function
|
|
|
|
dim as string scales = "DGMRT", source, targ
|
|
dim as double angles(12) = {-2, -1, 0, 1, 2, 6.2831853, 16, 57.2957795, 359, 399, 6399, 1000000}
|
|
print "Angle Normalised Unit | D G M R T"
|
|
for k as ubyte = 0 to 11
|
|
for i as ubyte = 1 to 5
|
|
source = mid(scales,i,1)
|
|
print angles(k), clip(str(anglenc(angles(k), source, source )), 10), source, "|",
|
|
for j as ubyte = 1 to 5
|
|
targ = mid(scales, j, 1)
|
|
print clip(str(anglenc(angles(k), source, targ )), 10),
|
|
next j
|
|
print
|
|
next i
|
|
next k
|