Maison > Article > développement back-end > Comment approximer les données avec une courbe de Bézier cubique multi-segments en tenant compte des contraintes de distance et de courbure ?
Approximation de données avec une courbe de Bézier cubique multi-segments : intégration de contraintes de distance et de courbure
Problème :
L'auteur recherche un algorithme pour approximer des données géographiques données à l'aide d'une courbe de Bézier cubique multi-segments avec deux contraintes :
Solution :
L'auteur a découvert une solution impliquant la conversion d'un B -Spline qui rapproche les données au sens des moindres carrés d'une courbe de Bézier multi-segments en utilisant la bibliothèque FITPACK et la liaison Python de scipy. La représentation B-Spline offre des avantages en termes de contrôle de la douceur et fournit un moyen de spécifier la douceur souhaitée de l'approximation.
Algorithme (simplifié) :
Mise en œuvre :
<code class="python">import matplotlib.pyplot as plt import numpy as np from scipy import interpolate # Read data into lists x and y tck, u = interpolate.splprep([x, y], s=3) # Generate B-Spline with smoothness parameter s=3 # Convert B-Spline to Bézier curve bezier_curves = b_spline_to_bezier_series(tck) # Evaluate and plot the Bézier curve unew = np.arange(0, 1.01, 0.01) out = interpolate.splev(unew, tck) plt.figure() plt.plot(x, y, out[0], out[1]) plt.show()</code>
En ajustant le paramètre de douceur s, l'utilisateur peut trouver une courbe qui satisfait aux contraintes de distance et de courbure souhaitées. La fonction b_spline_to_bezier_series fournie reconvertit la B-Spline en une courbe de Bézier cubique multi-segments pour une analyse ou une manipulation plus approfondie.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!