Nous pouvons également faire varier le rayon des points pour donner un aspect plus naturel à la courbe. Ce rayon dépend du "troisième" coefficient des points de contrôle, ce qui permet de moduler la taille des cercles tracés.

Incroyablement, le code d'avant (dans la section Vecteurs) gère cette amélioration avec seulement quelques modifications ! En effet, les vecteurs de NumPy adaptent automatiquement au nombres de coefficients.

Code

import pyxel
import numpy as np

SEGMENTS = 1000

def bezier_point(vec_ctrls, t):
    p = (1-t)**3 * vec_ctrls[0] + 3*(1-t)**2*t * vec_ctrls[1] + 3*(1-t)*t**2 * vec_ctrls[2] + t**3 * vec_ctrls[3]
    return p

def bezier_points(pt_ctrls):
    vec_ctrls = np.array(pt_ctrls)
    points = []
    for i in range(SEGMENTS + 1):
        t = i / SEGMENTS
        points.append(bezier_point(pt_ctrls, t))
    return points

def trace(pt_ctrls, couleur):
    for p in bezier_points(pt_ctrls):
        pyxel.circ(p[0], p[1], p[2], couleur)


pyxel.init(400, 400)

pyxel.colors[0] = 0xAFD6B4
pyxel.colors[1] = 0xf59690

pyxel.cls(0)

points_de_controle = [
    [100, 100, 0],
    [300, 100, 10],
    [100, 300, 10],
    [300, 300, 0]
]

trace(points_de_controle, 1)

pyxel.show()

Image

Modifié le: dimanche 29 septembre 2024, 20:36