python程序bezier函数

python程序bezier函数,python,math,bezier,Python,Math,Bezier,所以我尝试用python编程一条bezier曲线,与我之前找到的文章不同,我需要以这样的方式编程,求和调整有多少样条曲线,因为我需要能够删除或添加样条曲线 在标题“显式定义”之后,我的编程就基于这个wiki 到目前为止,这就是我所做的 from __future__ import division import math import numpy as np from pylab import* fact = math.factorial def binormal(n,i): koe

所以我尝试用python编程一条bezier曲线,与我之前找到的文章不同,我需要以这样的方式编程,求和调整有多少样条曲线,因为我需要能够删除或添加样条曲线

在标题“显式定义”之后,我的编程就基于这个wiki 到目前为止,这就是我所做的

from __future__ import division
import math
import numpy as np
from pylab import*


fact = math.factorial
def binormal(n,i):
    koef = fact(n)/float((fact(i)*fact(n-i)))
    return koef


def bernstein(n,i,t):
    bern = binormal(n,i)*(1-t)**(n-i)*(t**i)
    return bern

f = open('polaerekoordinator.txt','r')
whole_thing = f.read().splitlines()
f.close() #these are the coordinates I'm am trying to use for now
#0.000 49.3719597
#9.0141211 49.6065178
#20.2151089 50.9161568
#32.8510895 51.3330612
#44.5151596 45.5941772
#50.7609444 35.3062477
#51.4409332 23.4890251 
#49.9188042 11.8336229
#49.5664711 0.000

alle = []

for entry in whole_thing:
    alle.append(entry.split(" "))

def bezier(t): #where t is how many points there is on the bezier curve
    n = len(alle)
    x = y = 0
    for i,entry in enumerate(alle):
        x +=float(entry[0])*bernstein(n,i,t)+x
    for i,entry in enumerate(alle):
        y +=float(entry[1])*bernstein(n,i,t)+y
    return x,y

bezier(np.arange(0,1,0.01))
我现在的问题是,我需要求x和y坐标的和,所以它们变成这样

y = [y0, y0+y1, y0+y1+y2, y0+y1+y2+...+yn]
x也是一样


有什么建议吗?

我想你可以使用np.cumsum:

编辑:

使用您的示例坐标,我得到以下输出:

x,y = bezier(np.arange(0,1,0.01))
plot(x,y)


假设这就是你要找的

我认为您可以使用np.cumsum:

编辑:

使用您的示例坐标,我得到以下输出:

x,y = bezier(np.arange(0,1,0.01))
plot(x,y)


假设这就是你要找的

我不太清楚你想要实现什么,但可能是这样的:

for i, v in enumerate(y):
    y2.append(sum(y[:i+1]))
演示:

或者,使用列表理解的快捷方式:

y2 = [sum(y[:i+1]) for i,_ in enumerate(y)]

好吧,希望有帮助

我不太清楚你想要实现什么,但可能是这样的:

for i, v in enumerate(y):
    y2.append(sum(y[:i+1]))
演示:

或者,使用列表理解的快捷方式:

y2 = [sum(y[:i+1]) for i,_ in enumerate(y)]

好吧,希望有帮助

你说的y0是指前面的值
y[0]
?不,我指的是y0作为第一个条目,依此类推到第n个条目。我不明白你的问题的构成。从一些关于多条样条曲线的文本开始,我将其理解为多条Bézier线段。然后继续执行一个实现(我不喜欢,因为我更喜欢在每个步骤中实际计算阶乘的任何东西),最后询问累积和。它们有什么关系?多条样条曲线从何而来?你为什么需要这些累计金额?你想将它们应用于输入控制点还是输出曲线点?如果你阅读我链接的wiki,你会看到benzier是一个求和,我一直在尝试做的是首先定义二项式系数,然后定义因子(n,I)*t^2*(1-t)^(n-I),最后将其全部放在bezier函数中,我的问题是,我不知道如何求和所有部分(我现在从下面的答案中知道了)总之,我试图定义贝塞尔曲线,就像维基百科上写的那样,你是说前面的值
y[0]
?不,我是说y0作为第一个条目,依此类推到第n个条目。我不明白你问题的组成。从一些关于多条样条曲线的文本开始,我将其理解为多条Bézier线段。然后继续执行一个实现(我不喜欢,因为我更喜欢在每个步骤中实际计算阶乘的任何东西),最后询问累积和。它们有什么关系?多条样条曲线从何而来?你为什么需要这些累计金额?你想将它们应用于输入控制点还是输出曲线点?如果你阅读我链接的wiki,你会看到benzier是一个求和,我一直在尝试做的是首先定义二项式系数,然后定义因子(n,I)*t^2*(1-t)^(n-I),最后将其全部放在bezier函数中,我的问题是,我不知道如何求和所有部分(我现在从下面的答案中知道了)总之,我试图定义贝塞尔曲线,就像它在wikiseams中写的那样,工作得很好,但是你以后会如何绘制它,然后我使用plot(bezier(np.arange(0,1,0.01)))和show()它显示了一个包含许多单独线条的图形,没有一条线?接缝效果很好,但是你以后会如何绘制它,然后我使用plot(bezier(np.arange(0,1,0.01)))和show()它显示了一个包含大量单独线的图形,而不是一条线?