diff options
author | Alexei Podtelezhnikov <apodtele@gmail.com> | 2012-12-21 14:20:25 -0500 |
---|---|---|
committer | Alexei Podtelezhnikov <apodtele@gmail.com> | 2012-12-21 14:20:25 -0500 |
commit | cbf3fb39fd6aafc33505ea514b414021a43baaa8 (patch) | |
tree | bbb0120eeb87990be616f667022f210ec7556082 | |
parent | 3ffb822e925bef3f61dd29796e16e322f00451fc (diff) | |
download | freetype2-cbf3fb39fd6aafc33505ea514b414021a43baaa8.tar.gz |
* src/tools/cordic.py: Bring up to date with trigonometric core.
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | src/tools/cordic.py | 62 |
2 files changed, 12 insertions, 54 deletions
@@ -1,3 +1,7 @@ +2012-12-21 Alexei Podtelezhnikov <apodtele@gmail.com> + + * src/tools/cordic.py: Bring up to date with trigonometric core. + 2012-12-21 Werner Lemberg <wl@gnu.org> 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 r: - - if n >= 0: - x = 1.0/(2.0**n) # tangent value - else: - x = 2.0**(-n) +for n in range(0,32): - angle = math.atan(x) # arctangent - angle2 = angle*scale # arctangent in FT_Angle units + x = 0.5**n # tangent value - # 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 "" |