1

だから私はpythonを使ってベジエ曲線をプログラムしようとしています.以前に見つけた投稿とは異なり、スプラインの数に合わせて合計が調整されるようにプログラムする必要があります.スプラインを削除または追加します。

私はこのウィキhttp://en.wikipedia.org/wiki/B%C3%A9zier_curveの見出し「明示的な定義」の直後にプログラミングを基にしています。これまでのところ、これは私が作ったものです

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についても同じ

ポインタはありますか?

4

2 に答える 2

1

np.cumsum http://docs.scipy.org/doc/numpy/reference/generated/numpy.cumsum.htmlを使用できると思います:

>>>y = np.arange(0,1,0.1)
>>>[ 0.   0.1  0.2  0.3  0.4  0.5  0.6  0.7  0.8  0.9]
>>>y_cum = np.cumsum(y)
>>>[ 0.   0.1  0.3  0.6  1.   1.5  2.1  2.8  3.6  4.5]

編集:

あなたの例の座標を使用すると、次の出力が得られます。

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

ベジェ

 plot(np.cumsum(x),np.cumsum(y))

bezier_cumsum

これがあなたが探しているものだと仮定してください!

于 2013-11-08T12:09:51.903 に答える
0

何を達成しようとしているのかはよくわかりませんが、おそらく次のようなものです。

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

デモ:

>>> y = [1, 2, 3]
>>> y2 = []
>>> for i, v in enumerate(y):
    y2.append(sum(y[:i+1]))


>>> y2
[1, 3, 6]
>>> 

または、リスト内包表記を使用したショートカット:

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

さて、それが役立つことを願っています!

于 2013-11-08T12:33:19.043 に答える