我开始从零开始实现CORDIC算法,我不知道我错过了什么,这是我到目前为止所拥有的。
import math
from __future__ import division
# angles
n = 5
angles = []
for i in range (0, n):
angles.append(math.atan(1/math.pow(2,i)))
# constants
kn = []
fator = 1.0
for i in range (0, n):
fator = fator * (1 / math.pow(1 + (2**(-i))**2, (1/2)))
kn.append(fator)
# taking an initial point p = (x,y) = (1,0)
z = math.pi/2 # Angle to be calculated
x = 1
y = 0
for i in range (0, n):
if (z < 0):
x = x + y*(2**(-1*i))
y = y - x*(2**(-1*i))
z = z + angles[i]
else:
x = x - y*(2**(-1*i))
y = y + x*(2**(-1*i))
z = z - angles[i]
x = x * kn[n-1]
y = y * kn[n-1]
print x, y
当我插入z =π/ 2时,它返回0.00883479322917和0.107149125055,这没有任何意义。 任何帮助都会很棒!
@edit,我做了一些更改,现在我的代码有这些代替那些代码
for i in range (0, n):
if (z < 0):
x = x0 + y0*(2**(-1*i))
y = y0 - x0*(2**(-1*i))
z = z + angles[i]
else:
x = x0 - y0*(2**(-1*i))
y = y0 + x0*(2**(-1*i))
z = z - angles[i]
x0 = x
y0 = y
x = x * kn[n-1]
y = y * kn[n-1]
现在它的工作方式更好了,我遇到了问题,因为我没有使用临时变量作为x0和y0,现在当我插入z = pi / 2时,它给了我更好的数字(4.28270993661e-13,1.0): )