Dessiner des courbes lisses avec plusieurs points dans un canevas HTML5
Dans une application de dessin, il est courant de rassembler les coordonnées de mouvement de la souris et de les utiliser pour créer une ligne sur la toile. Cependant, la connexion directe de ces points à l’aide de la méthode lineTo aboutit souvent à une ligne irrégulière. La question se pose : comment pouvons-nous générer une courbe lisse passant par ces points ?
Limitations des fonctions de canevas intégrées
Les fonctions de canevas intégrées pour tracer des lignes , lineTo, quadraticCurveTo et bezierCurveTo sont limités dans la gestion de plus de quelques points d'échantillonnage. L'utilisation de quadraticCurveTo pour trois points et de bezierCurveTo pour quatre points peut introduire des angles vifs lorsque vous essayez de tracer une courbe continue.
Approximativement une courbe lisse
Pour créer une courbe lisse à travers plusieurs points, une méthode d’approximation peut être utilisée. Au lieu de tenter de tracer la courbe directement à travers les points échantillonnés, cette technique interpole les points médians entre les points adjacents. En connectant ces points interpolés avec des courbes quadratiques, une transition plus douce est obtenue.
Le code suivant illustre comment approximer une courbe lisse à l'aide de cette méthode :
<code class="javascript">// move to the first point ctx.moveTo(points[0].x, points[0].y); for (var i = 1; i < points.length - 2; i++) { var xc = (points[i].x + points[i + 1].x) / 2; var yc = (points[i].y + points[i + 1].y) / 2; ctx.quadraticCurveTo(points[i].x, points[i].y, xc, yc); } // curve through the last two points ctx.quadraticCurveTo(points[i].x, points[i].y, points[i+1].x,points[i+1].y); ctx.stroke();</code>
Avantages et considérations
Cette méthode d'approximation génère efficacement des courbes lisses sans nécessiter de points d'intersection exacts. Cependant, il est important de noter qu'il ne s'agit pas d'une solution parfaite :
Malgré ces considérations, cette méthode est largement utilisée dans les applications de dessin car elle offre un équilibre pratique entre l'esthétique visuelle et la performance.
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!