Ich möchte eine kubische Bezier-Kurve an einem Satz von 500 zufälligen Punkten anpassen.Kleinste Quadrate passen auf kubische Bezier-Kurve
Hier ist der Code, den ich für die Bezier-Kurve haben:
import numpy as np
from scipy.misc import comb
def bernstein_poly(i, n, t):
"""
The Bernstein polynomial of n, i as a function of t
"""
return comb(n, i) * (t**(n-i)) * (1 - t)**i
def bezier_curve(points, nTimes=1000):
nPoints = len(points)
x = np.array([p[0] for p in points])
y = np.array([p[1] for p in points])
t = np.linspace(0.0, 1.0, nTimes)
polynomial_array = np.array([ bernstein_poly(i, nPoints-1, t) for i in range(0, nPoints) ])
xvals = np.dot(x, polynomial_array)
yvals = np.dot(y, polynomial_array)
return xvals, yvals
if __name__ == "__main__":
from matplotlib import pyplot as plt
nPoints = 4
points = np.random.rand(nPoints,2)*200
xpoints = [p[0] for p in points]
ypoints = [p[1] for p in points]
xvals, yvals = bezier_curve(points, nTimes=1000)
plt.plot(xvals, yvals)
plt.plot(xpoints, ypoints, "ro")
for nr in range(len(points)):
plt.text(points[nr][0], points[nr][1], nr)
plt.show()
Ich bin mir bewusst, dass Numpy und Scipy Methode der kleinsten Quadrate haben: numpy.linalg.lstsq und scipy.optimize.least_squares
Aber ich bin nicht sicher, wie kann ich Verwenden Sie sie zum Anpassen der Kurve an die 500 Punkte. Kann jemand etwas Hilfe anbieten?
Danke
Welcher Teil Ihrer Daten rechtfertigt die Verwendung einer Bezier-Kurve, im Gegensatz zu etwas, das viel besser für die Anpassung von verrauschten Daten geeignet ist? Denn bevor jemand Ihre Frage beantwortet, sollten Sie in der Lage sein zu beantworten, warum Sie denken, dass Sie eine Bezier-Kurve brauchen anstatt etwas Angemessener. –
Ich verwende in diesem Fall speziell eine Bezier-Kurve, weil ich den Anweisungen aus einem Buch folge und das möchte ich gerne umsetzen. Ich weiß, dass es viel bessere Möglichkeiten gibt, aber in diesem speziellen Beispiel muss ich Bezier-Kurven verwenden. – stepp0
Das deutet darauf hin, dass Sie in Ihrer Frage noch nicht ganz ehrlich waren. Ich bin sicher, das zu sagen, was Sie gerade in Ihrem Post gesagt haben, und zu sagen, welches Buch, ist das Gegenteil von unnötigen Informationen. –