[Spline] Comment qu'on fait

Comment qu'on fait [Spline] - Programmation

Marsh Posté le 13-03-2002 à 16:57:52    

Voila j'ai 4 points : a,b,c et d.
J'aimerais tracer une spline a partir de ces points de controle, sachant qu'elle doit passer par les points a et d.
 
Comment  fait on ?
 
Par exemple en admetant que la spline soit parametrique avec pour t=0 (la spline est en a) et t=1 (la spline et en d), comment calculer x et y pour t = 0.7 par exemple.
 
Bon y'a peut etre des erreurs mathematique dans l'enoncé mais soyez comprehensifs.

Reply

Marsh Posté le 13-03-2002 à 16:57:52   

Reply

Marsh Posté le 13-03-2002 à 17:06:48    

Il y a un algo, ca ne s'invente pas ...
si tu n'a pas ca dans un cours ou autre chose, google est ton ami.

Reply

Marsh Posté le 13-03-2002 à 17:08:51    

pour les précisions mathématiques :
http://perso.club-internet.fr/brunsr/tipe/tipe.htm
 
trouvé en 2 minutes avec :
http://www.google.fr/search?q=spli [...] %3Dlang_fr
A+

Reply

Marsh Posté le 13-03-2002 à 17:13:07    

il y a une infinité de splines qui passent par a et b :D
 
* tu veux probablement une courbe de bézier, qui a la propriété d'être contenue dans le polygone défini par a, b, c, d.  
 
algo de de casteljau : pour une courbe de n points, tu as n-1 segments. tu réduis pour tout t de 0 à 1 cet ensemble de segments jusqu'à n'avoir plus qu'un seul point.  
 
tes trois segments sont
 
[a, b]
[b, c]
[c, d]
 
et donnent les points
 
A1 = (a*(1-t), b*t)
B1 = (b*(1-t), c*t)
C1 = (c*(1-t), d*t)
 
ces trois points te donnent deux segments :
 
[A1, B1]
[B1, C1]
 
ces deux segments te donnent deux points :
 
A2 = [A1*(1-t), B1*t]
B2 = [B1*(1-t), C1*t]
 
tu n'as plus qu'un segment :
 
[A2, B2]
 
qui te donne le point de la courbe :
 
A3 = (A2*(1-t), B2*t)
 
l'avantage est qu'avec ça, tu peux tracer une courbe avec n'importe quel nombre de points de contrôle.
 
tu peux réduire le topo au-dessus pour avoir une belle équation en fonction des quatres points.
 
//
 
si tu veux que les courbes passent par tous les points, c'est catmull-rom, si tu veux contrôler d'autres paramètres, regarde du côté des kochanek bartels.

Reply

Marsh Posté le 13-03-2002 à 17:16:19    

Merci pour vos reponse. Va falloir que j'allume mon cerveau ce soir !!!

Reply

Marsh Posté le 14-03-2002 à 01:15:08    

Ce que tu obtiens en faisant le calcul ce sont
les polynomes de bernstein.
 
M(t) = Somme de 0 a n (Bin(t)*Ai) avec Ai tes points de controle
et les Bin les polynomes de bernstein:
B0n = (1-t)^n
B1n = C1n*t*(1-t)^(n-1)
.. etc..
Bnn = t^n
 
Cin c'est le coefficient polynomial bien connu
Cin = n!/(i! * (n-i)!);
 
donc pour n = 3
M(t) = (1-t)^3*A0 + 3 * t * (1-t)^2 * A1 + 3 * t^2 *(1-t) * A2 + t^3 * A3;
 
A votre service
LEGREG

Reply

Marsh Posté le 14-03-2002 à 09:42:14    

DarkOli a écrit a écrit :

Merci pour vos reponse. Va falloir que j'allume mon cerveau ce soir !!!  




 
bah c pas si ignoble a faire que ca ;)
 
celle que j'utilise assez frequemment c catmull rom, qui a l'avantage d'etre passablement simple a coder :
 
http://www.cubic.org/~submissive/sourcerer/hermite.htm

Reply

Marsh Posté le 14-03-2002 à 10:27:26    

ben remerci, pour vos nouvelles reponses, et si tout se passe bien ce soir je vais pouvoir faire des gribouillages.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed