From cbf3fb39fd6aafc33505ea514b414021a43baaa8 Mon Sep 17 00:00:00 2001 From: Alexei Podtelezhnikov Date: Fri, 21 Dec 2012 14:20:25 -0500 Subject: [PATCH] * src/tools/cordic.py: Bring up to date with trigonometric core. --- ChangeLog | 4 +++ src/tools/cordic.py | 62 ++++++--------------------------------------- 2 files changed, 12 insertions(+), 54 deletions(-) diff --git a/ChangeLog b/ChangeLog index 19ff20e4d..1d978a95a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2012-12-21 Alexei Podtelezhnikov + + * src/tools/cordic.py: Bring up to date with trigonometric core. + 2012-12-21 Werner Lemberg Check parameters of `FT_Outline_New'. diff --git a/src/tools/cordic.py b/src/tools/cordic.py index 3f80c5f09..44bdc20cd 100644 --- a/src/tools/cordic.py +++ b/src/tools/cordic.py @@ -2,65 +2,20 @@ import sys, math #units = 64*65536.0 # don't change !! -units = 256 +units = 180 * 2**16 scale = units/math.pi shrink = 1.0 comma = "" -def calc_val( x ): - global units, shrink - angle = math.atan(x) - shrink = shrink * math.cos(angle) - return angle/math.pi * units - -def print_val( n, x ): - global comma - - lo = int(x) - hi = lo + 1 - alo = math.atan(lo) - ahi = math.atan(hi) - ax = math.atan(2.0**n) - - errlo = abs( alo - ax ) - errhi = abs( ahi - ax ) - - if ( errlo < errhi ): - hi = lo - - sys.stdout.write( comma + repr( int(hi) ) ) - comma = ", " - - print "" print "table of arctan( 1/2^n ) for PI = " + repr(units/65536.0) + " units" -# compute range of "i" -r = [-1] -r = r + range(32) +for n in range(0,32): -for n in r: + x = 0.5**n # tangent value - if n >= 0: - x = 1.0/(2.0**n) # tangent value - else: - x = 2.0**(-n) - - angle = math.atan(x) # arctangent - angle2 = angle*scale # arctangent in FT_Angle units - - # determine which integer value for angle gives the best tangent - lo = int(angle2) - hi = lo + 1 - tlo = math.tan(lo/scale) - thi = math.tan(hi/scale) - - errlo = abs( tlo - x ) - errhi = abs( thi - x ) - - angle2 = hi - if errlo < errhi: - angle2 = lo + angle = math.atan(x) # arctangent + angle2 = round(angle*scale) # arctangent in FT_Angle units if angle2 <= 0: break @@ -68,12 +23,11 @@ for n in r: sys.stdout.write( comma + repr( int(angle2) ) ) comma = ", " - shrink = shrink * math.cos( angle2/scale) - + shrink /= math.sqrt( 1 + x*x ) print print "shrink factor = " + repr( shrink ) -print "shrink factor 2 = " + repr( shrink * (2.0**32) ) -print "expansion factor = " + repr(1/shrink) +print "shrink factor 2 = " + repr( int( shrink * (2**32) ) ) +print "expansion factor = " + repr( 1/shrink ) print ""