summaryrefslogtreecommitdiff
path: root/Build/source/libs/freetype2/freetype-2.3.8/src/tools/cordic.py
diff options
context:
space:
mode:
authorPeter Breitenlohner <peb@mppmu.mpg.de>2009-03-20 08:07:15 +0000
committerPeter Breitenlohner <peb@mppmu.mpg.de>2009-03-20 08:07:15 +0000
commitb89093a4be8467433b6dbabfa09b57e213a53fe0 (patch)
tree6f4fb6eecce8905febf68c34d5926699790466e1 /Build/source/libs/freetype2/freetype-2.3.8/src/tools/cordic.py
parent10d837d22d7d99b26f44847f92501f6037da4ec2 (diff)
new build system
git-svn-id: svn://tug.org/texlive/trunk@12451 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/libs/freetype2/freetype-2.3.8/src/tools/cordic.py')
-rw-r--r--Build/source/libs/freetype2/freetype-2.3.8/src/tools/cordic.py79
1 files changed, 79 insertions, 0 deletions
diff --git a/Build/source/libs/freetype2/freetype-2.3.8/src/tools/cordic.py b/Build/source/libs/freetype2/freetype-2.3.8/src/tools/cordic.py
new file mode 100644
index 00000000000..3f80c5f09a5
--- /dev/null
+++ b/Build/source/libs/freetype2/freetype-2.3.8/src/tools/cordic.py
@@ -0,0 +1,79 @@
+# compute arctangent table for CORDIC computations in fttrigon.c
+import sys, math
+
+#units = 64*65536.0 # don't change !!
+units = 256
+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)
+
+ 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
+
+ if angle2 <= 0:
+ break
+
+ sys.stdout.write( comma + repr( int(angle2) ) )
+ comma = ", "
+
+ shrink = shrink * math.cos( angle2/scale)
+
+
+print
+print "shrink factor = " + repr( shrink )
+print "shrink factor 2 = " + repr( shrink * (2.0**32) )
+print "expansion factor = " + repr(1/shrink)
+print ""
+