아래 코드 중 일부를 게시했습니다. Newton() 함수는 Bezier() 함수를 호출합니다. Bezier() 함수에는 p0과 p3을 얻을 수있는 곳의 목록이 있습니다. 내가하려는 것은 첫 번째 반복에서 프로그램은 plist에서 첫 번째와 두 번째 항목을 p0 및 p3으로 가져와야합니다. 두 번째 반복에서 p0와 p3은 두 번째와 세 번째 항목입니다. 반복 할 때마다 p0 및 p3 값이 변경되어야합니다. 새로운 p0는 오래된 p3과 같습니다. 이 코드를 제대로 삽입 할 수 없습니다. 고맙습니다. 그것은각 반복에서 목록의 두 개의 연속 값 사용
import math
w = 1.0
def Newton(poly):
""" Returns a root of the polynomial"""
x = 0.5 # initial guess value
counter = 0
epsilon = 0.000000000001
poly_diff = poly_differentiate(poly)
while True:
x_n = x - (float(poly_substitute(poly, x))/float(poly_substitute(poly_diff, x)))
counter += 1
if abs(x_n - x) < epsilon :
break
x = x_n
print "\tIteration " , counter , " : ", x_n
print "u: ", x_n
Bezier(x_n)
def Bezier(x_n) :
""" Calculating sampling points using rational bezier curve equation"""
u = x_n
plist = [0.5, 0.1, 0.4, 0.35, 0.8, 0.6, 1.0, 0.2, 0.7, 0.9] # list of parameter values of the phonemes
for i in range(len(plist) - 1) :
p0 = plist[i]
p3 = plist[i + 1]
p1 = p0
p2 = p3
print p0, p3
p_u = math.pow(1 - u, 3) * p0 + 3 * u * math.pow(1 - u, 2) * p1 \
+ 3 * (1 - u) * math.pow(u, 2) * p2 + math.pow(u, 3) * p3
p_u = p_u * w
d = math.pow(1 - u, 3) * w + 3 * u * w * math.pow(1 - u, 2) + 3 * (1 - u) * w * math.pow(u, 2) + math.pow(u, 3) * w
p_u = p_u/d
print "p(u): ", p_u
return plist
if __name__ == "__main__" :
여분의 변수'td = 0.04' (* timedelta *)를 추가하면 조금 덜 반복됩니다;) – plaes
가능한 한 작게 변경하여 작동하도록했습니다. 질문자는 다른 추상화를 도입하지 않고도 충분한 시간을 보내고 있습니다. 질문의 역사를 살펴보십시오. – agf