Algo de tracé de Splines

Algo de tracé de Splines - Algo - Programmation

Marsh Posté le 14-05-2006 à 12:08:14    

Salut,
 
je cherche en fait un algo pour tracer des splines
et je voudrai savoir si les courbes de Bezier entrent en jeu ou pas
 
En vous remerciant d'avance

Reply

Marsh Posté le 14-05-2006 à 12:08:14   

Reply

Marsh Posté le 14-05-2006 à 15:14:30    

Salut,
En tapant spline sur Google ou Wikipedia, les réponses te conviennent? Sinon, Mathworld est pas mal non plus.  
Les courbes de Bezier sont l'un des types de splines existantes

Reply

Marsh Posté le 14-05-2006 à 16:06:07    

si j'ai posté ici, c'est que je n'ai pas trouve grand chose sur Google concernant les algos pour tracer des splines  
en ce qui concerne wikipedia, il donnent des details surtout sur les courbes de beziers  :(

Reply

Marsh Posté le 14-05-2006 à 16:13:24    

et Mathworld?

Reply

Marsh Posté le 14-05-2006 à 19:13:49    

j'ai jete un coup d'oeil, mais concernant les splines c'est pas trop detaillé  :(  
mais ca ne m'a pas trop avancé  :cry:

Reply

Marsh Posté le 14-05-2006 à 19:45:11    

y'a des tonnes de trucs sur les b-splines.
 
maintenant ça dépends de ce que tu veux faire: des b-splines précises au pixel près, ou une approximation par ligne.

Reply

Marsh Posté le 14-05-2006 à 22:04:44    

il mefaut juste une approximation par lignes, comme dans le cas des courbes de Bezier  
si vous avez une methode ou un algo pour le realiser, ca serait sympa
j'ai chercher un peu partout, je vais regarder demain dans des bouquins voir si je trouve quelque chose

Reply

Marsh Posté le 14-05-2006 à 22:33:48    

Tiens, je viens de voir le site de David Eberly. Il contient des maths sur quelques types de spline: http://www.geometrictools.com/Documentation.html à Curves et Interpolation
La page de Code est bien fournie, mais n'est pas indépendant de son moteur et te demandera donc de bien comprendre le tout...
 
J'espère que ça répond un peu à ce que tu veux :)
 
Sinon, tu cherches un type de spline particulier? Pour l'instant, t'as pas l'air de vouloir des courbes de Beziers, mais tu n'en as pas cité d'autres.

Reply

Marsh Posté le 14-05-2006 à 22:37:36    

Tu as aussi ce site qui contient quelques splines, dont certaines avec algo.

Reply

Marsh Posté le 14-05-2006 à 23:37:30    

Merci IrmatDen, il est tres interessant le deuxieme, il donnent pas mal de formules mathematiques  
c'est vraiement tres interessant  :)

Reply

Marsh Posté le 14-05-2006 à 23:37:30   

Reply

Marsh Posté le 18-05-2006 à 23:48:41    

Me revoila, j'ai lu pas mal de documenrs conernant les splines, mais dans plupart du temps ils donnent que des formules( Cox de Boor )  
mais je n'ai trouve aucun alogortihme pour tracer une spline  :(  
du coup je reste un peu coince pour le moment
 
je voulais donc savoir si l'un de vous a deja eu affaire a ce genre de courbes à tracer en C pour m'eclaircir un peu  :)

Reply

Marsh Posté le 19-05-2006 à 00:18:39    

Si tu cherches un algo sur Cox de Boor, tape le dans Google, et la première réponse te mènes (presque) direct sur un code source l'implémentant; la 3ème réponse te mènes dans les entrailles de cet algo.
Amuse-toi bien :)

Reply

Marsh Posté le 19-05-2006 à 10:23:21    

eljoundi a écrit :

Me revoila, j'ai lu pas mal de documenrs conernant les splines, mais dans plupart du temps ils donnent que des formules( Cox de Boor )  
mais je n'ai trouve aucun alogortihme pour tracer une spline  :(  
du coup je reste un peu coince pour le moment
 
je voulais donc savoir si l'un de vous a deja eu affaire a ce genre de courbes à tracer en C pour m'eclaircir un peu  :)


 
bin si tu veux émuler la courbe via des lignes dont les points sont sur la ligne (la rasterisation de courbe doit être plus chiant),il te faut juste l'équation qui te donne les poids des vertexs en fonction de t.

Reply

Marsh Posté le 19-05-2006 à 10:36:23    

Pour bezier, tu as aussi des algos de tracé spécifiques qui tirent parti de la construction d'une courbe de bézier récursivement à partir des milieux des segments reliant les points de contrôle.
 
je sais plus où j'ai vu ça, mais tu devrais pouvoir trouver des infos sans problème sur le Net


---------------
TriScale innov
Reply

Marsh Posté le 19-05-2006 à 10:46:14    

oui, ou sinon dans ses cours de maths ;)

Reply

Marsh Posté le 19-05-2006 à 13:51:15    

Pour les courbes de Bezier, j'arrive à les tracer recursivement via un algorithme, chose que je n'ai pas trouvée pour le cas des Splines  :(  
l'un de vous a deja vu un algo de trace de Splines recursif ?

Reply

Marsh Posté le 19-05-2006 à 14:11:52    

pour les autres types de splines, je ne pense pas qu'il soit possible de les tracer en récursif (c'est une propriété très spécifique à Bezier).


---------------
TriScale innov
Reply

Marsh Posté le 19-05-2006 à 14:30:58    

les splines qui m'interessent sont les B-splines en fait
je croyais qu'on pouvait les tracer recursivement, ca aurait facilité les choses à mon avis  :whistle:  

Reply

Marsh Posté le 19-05-2006 à 14:48:36    

l'intêret ?
 
tu veux faire un traçage au pixel près ?

Reply

Marsh Posté le 19-05-2006 à 14:53:09    

dans tous les cas je vois pas l'intêret d'un récursif par rapport à l'itératif.
 
si tu peux te contenter d'un traçé par lignes, pour les B-Splines, t'as tes trois vertexs, les équations de Reimann te donne les poids, et tu fais tes pitis calculs de barycentre.


Message édité par bjone le 19-05-2006 à 14:53:37
Reply

Marsh Posté le 19-05-2006 à 14:54:00    

un trace par segments me conviendrait
mais j'ai aucune idée comment de la maniere du trace,l'idee que j'avais en tete est d'utiliser les courbes de bezier pour tracer les splines
je suis completement paumé la  :??:


Message édité par eljoundi le 19-05-2006 à 14:54:44
Reply

Marsh Posté le 19-05-2006 à 14:58:49    

tu regardes ta spline comme une courbe paramétrée x(t), y(t) avec t variant entre 0 et 1. Si tu te démerdes en maths, tu peux même reparamétrer ta courbe pour que le paramètre soit l'abscisse curviligne comme ça tu auras un bon rendu avec un nombre minimal de points.
 
Tu te génères un ensemble de N points sur ta courbe genre x_i = x(i/N) , y_i = y(i/N) et tu traces tous les segments (x_i,y_i)-(x_i+1, y_i+1)
 
Pas si compliqué que ça, en fait.


---------------
TriScale innov
Reply

Marsh Posté le 19-05-2006 à 14:59:06    

je pourrais te filer un truc tout fait que tu pourrais trouver tout de suite en cherchant où il faut, mais faudrait que tu cherches un peu.
 
pour les B-Splines:
=> 3 vertexs
=> t variant de 0 à 1, la courbe commence la moitié de V0-V1, et fini à la moitié de V1-V2
=> t'as les equations de Riesenfeld qui donnent le poids de chaque Vertex par rapport à t.
=> tu construits ta liste de points B-Splinés, et tu traçes des lignes entre chaque.
 
edit: j'ai confondu Reimann et Riesenfeld :D shame on me (en même temps j'ai toujours été une quiche en maths)
 
edit: grillé :D


Message édité par bjone le 19-05-2006 à 15:05:34
Reply

Marsh Posté le 19-05-2006 à 15:26:07    

je vois un peu le rapport de ta méthode franceso et ce que j'ia commence un peu sur papier, j'ai trouve les equations ( polynomes de degré 3 )
il me reste plus qu'a generer les points et tracer equations, je vais me aller dans cette direction qui me semble pas trop dur à implementer
 
sinon bjone, j'aimerai bien voir à quoi ressemble le code, au moins voir l'architecture, et voir si je peux ameliorer ma méthode, ca serait très sympa de ta part  :jap:  
 
En tout cas merci à vous , franceso & bjone  :)

Reply

Marsh Posté le 19-05-2006 à 15:31:15    

bjone et moi avons proposé la même méthode (d'accord avec moi, bjone ?). C'est juste qu'on n'a pas employé les mêmes mots. Dans les deux cas il s'agit de discrétiser ta courbe en générant un nombre fini de points dessus. Ensuite tu te contentes de relier ces points par des segments.


---------------
TriScale innov
Reply

Marsh Posté le 19-05-2006 à 15:38:19    

mais concernant les points de controle, je me contenterai seulement de 4 ?
je ne l'ai pas precise, mais je veux tracer un B-spline cubique  :)

Reply

Marsh Posté le 19-05-2006 à 15:41:35    

franceso a écrit :

bjone et moi avons proposé la même méthode (d'accord avec moi, bjone ?). C'est juste qu'on n'a pas employé les mêmes mots. Dans les deux cas il s'agit de discrétiser ta courbe en générant un nombre fini de points dessus. Ensuite tu te contentes de relier ces points par des segments.


 
tout à fait.

Reply

Marsh Posté le 19-05-2006 à 15:48:15    

eljoundi a écrit :

mais concernant les points de controle, je me contenterai seulement de 4 ?
je ne l'ai pas precise, mais je veux tracer un B-spline cubique  :)


 
arf, moi j'ai jamais fait que des B-Splines avec 3 vertex :D si ça existe c'est une ordre différent, et il faut trouver les equations de poids alors.
il y a ptet une formule générale en fonction de l'ordre. (moi je m'arrêtes là)
 
le truc qui me gêne pour moi, c'est qu'une B-Splines ça viens se connecter au mileu d'un segment reliant deux vertex en tangentant. (c'est pas  forcément la même approche qu'une courbe de bezier qui va ne plus rien avoir avec les segments reliant les vertexs)
 
ndlr: après tu peux construire une figure avec 1000 vertexs si tu veux, mais pour moi ça va être plein de b-splines indépendantes a la queue-le-le se connectant entre elles au milieu des segments.


Message édité par bjone le 19-05-2006 à 15:49:32
Reply

Marsh Posté le 19-05-2006 à 15:56:20    

Citation :

ndlr: après tu peux construire une figure avec 1000 vertexs si tu veux, mais pour moi ça va être plein de b-splines indépendantes a la queue-le-le se connectant entre elles au milieu des segments.


 
il faut que j'arrive à en tracer une avec 3 vertex deja  :D , apres je vais voir si je peux mettre le turbo

Reply

Marsh Posté le 21-05-2006 à 01:36:02    

Me revoila, je suis de retour, j'ai avance un peu dans mon code, mais j'arrive toujours pas a tracer la B-spline
j'ai bien mis les points de controles, je crees les points pour la courbes de beziers correspondants, mais à la fin je n'ai que le trace de la base :s
et pas celui de la bspline  :(

Reply

Marsh Posté le 21-05-2006 à 11:20:54    

bin traçe tous les points générés pour voir si ça marche déjà.

Reply

Marsh Posté le 21-05-2006 à 13:49:30    

j'ai commence par construire 4points de controle, et en essayant de les relier pour creer la courbe de bezier, ca plante  :(  
fenetre noire, et bug  :cry:

Reply

Marsh Posté le 21-05-2006 à 20:18:26    

ta routine de b-spline, elle prends 3 ou 4 points de contrôle ?

Reply

Marsh Posté le 21-05-2006 à 20:58:38    

4points de controles
l'exemple que je veux realiser c'est celui la : n=3, k=4  
http://www.ibiblio.org/e-notes/Splines/Basis.htm
 
ce que j'ai fait pour l'instant, c'est que j'arrive a tracer une courbe de Bezier avec 4 points de controles en passant par deux fonction, une qui calcule le polynome et l'autre qui creent les points ( calcules a partir du polynome et suivant un pas que je chsoisi )que je dois relier apres avec la fonction de trace de segment pour avoir ma courbe de Bezier
 
pour ce qui est de la Bspline, je me donne 4points de controles, à partie desquels je construis les sommets de la courbe de Bezier avec cette fonction :  

Code :
  1. // Px et Px : coordonnes des points de controles
  2. // Bx et By : les nouveaux sommets de la courbe de Bezier que je vais tracer pour obtenir la B-Spline
  3. void SommetsBezier (void){
  4.     int m;
  5. m = Pn;
  6.     for (i = 0; i < m; i++) {
  7.         Bx[Bn] = (Px[i]+4*Px[i+1]+Px[i+2])/6;
  8.         By[Bn] = (Py[i]+4*Py[i+1]+Py[i+2])/6;
  9.         Bn++;
  10.        
  11.         Bx[Bn] = (2*Px[i+1]+Px[i+2])/3;
  12.         By[Bn] = (2*Py[i+1]+Py[i+2])/3;
  13.         Bn++;
  14.        
  15.         Bx[Bn] = (Px[i+1]+2*Px[i+2])/3;
  16.         By[Bn] = (Py[i+1]+2*Py[i+2])/3;
  17.         Bn++;
  18.        
  19.         Bx[Bn] = (Px[i+1]+4*Px[i+2]+Px[i+3])/6;
  20.         By[Bn] = (Py[i+1]+4*Py[i+2]+Py[i+3])/6;
  21.         Bn++;
  22.  printf("(%f , %f)\n",Bx[i],By[i]);
  23.     }
  24. }


 
mais malgre cela j'arrive toujours pas à tracer la courbe  :(

Reply

Marsh Posté le 22-05-2006 à 14:09:02    

Ouf, j'ai enfin reussi à finir cette satane B-spline  :fou:  
le programme marche bien pour le moment  :bounce:  :bounce:  
 
Merci à vous Bjone & francesco
 
Edit : pardon Franceso  :D


Message édité par eljoundi le 22-05-2006 à 14:09:27
Reply

Marsh Posté le 22-05-2006 à 14:10:30    

Bravo !
 
c'est juste une spline, ou tu as déjà fait l'enchainement de toutes les splines construites avec tous tes points de contrôle ?


---------------
TriScale innov
Reply

Marsh Posté le 23-05-2006 à 00:22:45    

c'est une B-Spline que je trace en fixant un n et un ordre k , ce qui me fait n+1 points de controle, à partir desquels je crees mes noeuds et mes points de spline que je trace une par une pour avoir la courbe  :)

Reply

Marsh Posté le 02-05-2008 à 03:24:13    

eljoundi a écrit :

c'est une B-Spline que je trace en fixant un n et un ordre k , ce qui me fait n+1 points de contrôle, à partir desquels je crees mes noeuds et mes points de spline que je trace une par une pour avoir la courbe  :)


 
Excellent, moi aussi je dois coder le traçage de courbes b-splines! je serais cool si tu me files un coup car j'ai d'énormes problèmes sur ce traçage. Mais déjà j'aurais besoin de savoir en quel langage tu as codé ton traçage, tu l'as codé en C++? en Java? en Pascal?....

Reply

Marsh Posté le 02-05-2008 à 09:53:15    

Codé en C avec la librairie Glut :)


---------------
Flick r || =>   Mon FeedBack   <=
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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