summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexei Podtelezhnikov <apodtele@gmail.com>2012-12-21 14:20:25 -0500
committerAlexei Podtelezhnikov <apodtele@gmail.com>2012-12-21 14:20:25 -0500
commitcbf3fb39fd6aafc33505ea514b414021a43baaa8 (patch)
treebbb0120eeb87990be616f667022f210ec7556082
parent3ffb822e925bef3f61dd29796e16e322f00451fc (diff)
downloadfreetype2-cbf3fb39fd6aafc33505ea514b414021a43baaa8.tar.gz
* src/tools/cordic.py: Bring up to date with trigonometric core.
-rw-r--r--ChangeLog4
-rw-r--r--src/tools/cordic.py62
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 <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 ""