MO
moona

Bonsoir à vous,

pouvez vous m'expliquer s'il vous plait, comment résoudre un problème de courbe de Bézier, voici mon problème

On considère les deux lignes brisées (p0, p1, p2, p3) et (p3, p4, p5, p6), définies par les points p0....p6 donnés par:

p0=(1, 0)
p1=(3, -1)
p3=(2, 4)
p4=(-1, 4)
p5=(2, 2)
p6=(0, 1)

On voudrait approximer chacune de ces deux lignes par une courbe de bézier à 4 points de contrôle, tel que:

-C1(t) est l'équation de la courbe approximant (p0, p1, p2, p3)
-C2(t) est l'équation de la courbe approximant (p3, p4, p5, p6)

Donner les équation de C1(t) et C2(t)

La matrice de base associée aux courbes de bézier est

M=
-1 3 -3 1
3 -6 3 0
-3 3 0 0
1 0 0 0

merci de me montrer la technique pour C1(t)

avatar
bongo1981

Si j'ai le temps de m'y plonger je regarderai (pas avant ce soir), comme je connais pas, je vais lire cette page (donc je te conseille d'en faire autant)
http://fr.wikipedia.org/wiki/Courbe_de_B%C3%A9zier

L'exemple est traitée entièrement là :
http://fr.wikipedia.org/wiki/Courbe_de_ ... r#Exemples

Il n'y a plus qu'à piocher et appliquer.

MO
moona

Merci bango1981 :)

au fait je crois que la solution de l'exercice est un peu plus simple que la technique montré sur wikipedia en utilisant les matrices.

avatar
bongo1981

Sûrement, wikipedia n'explique pas vraiment comment faire avec les matrices (à moins que j'ai manqué un passage).

Si tu trouves le temps, et que tu en as envie, tu peux mettre la solution dans un poste ultérieur (ça sera utile pour les gens qui consultent le forum, ou pour toi plus tard si tu te rappelles plus).

MO
moona

voici la méthode proposé:

C1(t) = T x M x P

T = (t3,t2,t,1) [transposé]
M = la matrice de base
P = (p0,p1,p2,p3) [transposé]

C1(t) = P0(-t3 + 3t2 - 3t + 1) + P1(3t3 - 6t2 + 3t) + P2(-3t3 + 3t2) + P3(t^3)

je l'ai écrite sous forme d'équation paramétrique (je ne sais pas si c'est juste)
j'ai réussi à trouver la solution mais je ne suis pas très sûr de mes calculs, je vous la quant même:

X(t) = -53 - 6t2 + 6t + 1
Y(t) = -23 + 12t2

(une rectification, j'ai oublié de mentionner les paramètres du point P2=(3,2))

avatar
bongo1981

Avec le polynôme de Bernstein tu trouves exactement la même chose.

C1(t) = P0*(1-t)3 + 3*P1*(1-t)2*t + 3*P2*(1-t)*t2 + P3*t3

Et la matrice M a l'air facile à mettre en place, ça regroupe les coefficients du polynome ligne par ligne, en incorporant le facteur C(n,k)

En fait ce sont deux écritures de la même chose (le polynôme de Bernstein avec les coefficients du binôme, ou bien la matrice M mais il faut pouvoir la trouver pour tout n, je pense que M(i,j) = C(n,i-1) * C(n,j-1) où les C(i,j) sont les coefficients du binôme, i la ligne, j la colonne et n l'ordre, ici 3).

Au fait c'est pour quelle application ?

MO
moona

Bonsoir bongo,

tu as raison oui, on peut trouver la matrice M mais ça prendra beaucoup de temps pour le faire.

au fait, je dois apprendre ça pour mon cours d'infographie ou je dois approximer des lignes par une courbe de bézier

avatar
bongo1981

C'est assez rapide, j'ai donné la formule dans mon précécent poste

Intéressant l'infographie.

LA
lambda0

En fait, ça va plus loin que l'infographie : le grand intérêt de la base de Bernstein est de produire des schémas numériques stables pour le calcul de polynomes de degrés élevés.
Si on veut calculer un polynôme comme a.x10+b.x9+ etc., le résultat peut être très sensible aux arrondis numériques si on laisse le polynôme exprimé sur la base des monomes.
Si par contre, par un changement de base, on exprime ce polynôme sur la base de Bernstein, le comportement numérique est bien meilleur aux degrés élevés.
Cette projection est aussi très utile pour résoudre les équations polynomiales, je m'en sert assez souvent en calcul scientifique.

A+

avatar
bongo1981

Je m'en doute bien :)
En tout cas merci pour ces précisions lambda0, c'est quelque chose que je vais rajouter à mon arsenal :o