B-Spline avec multiplicité
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

B-Spline avec multiplicité



  1. #1
    invite1de74a73

    B-Spline avec multiplicité


    ------

    Bonjour,

    je ne sais pas si je suis au bon endroit mais je fait confiance aux modérateurs pour me rediriger si besoin.

    Voici mon problème, je suis informaticienne (et pas forcement très avancée en mathématique) et je cherche à intégrer dans mon logiciel de CAO, l'importation de B-SPLINE provenant de différents formats de fichier. Dans le cadre de l'affichage de ces B-Splines je cherche a faire une approximation des coordonnées de ces B-Spline.

    J'ai réussi à faire le calcul pour des B-Spline simple c'est a dire ayant une multiplicité de 0, et le problème est que mon calcul tombe sur les coordonnée (0,0) lorsque j'ai un multiplicité non nul.

    Voici mes formules ( histoire que vous me confirmiez que ce sont bien les bonnes)

    Bi,p(t) = ((T-Ti)/(Ti+p-Ti))*Bp-1,i(t)+((Ti+1+p -t)/(Ti+1+p-Ti+1))*Bp-1,i+1(t)

    X(t) = SOMME(Bi,k*Pi)de 0 à n-p-1

    avec n : nombre de noeud
    avec p : degrès de la B-Spline


    je me trouve assez souvent avec des dénominateurs nul dans ma formule Bi,k(t) or j'ai lu sur les différents documents qu'on part du principe que lorsque j'ai un dénominateur nul, la division égale 0, es-ce bien juste?

    voici, mon exemple :
    vecteur nodal : {0,0,0,0,1,1,1,2,2,2,3,3,3,3}

    points de Control :
    P0 = {56.73404213 ; 106.7508327}
    P1 = {73.81828191 ; 137.1474469}
    P2 = {85.13387776 ; 135.5942246}
    P3 = {99.77743803 ; 126.9411726}
    P4 = {114.4209983 ; 118.2881205}
    P5 = {129.952188 ; 97.21032344}
    P6 = {126.402187;82.34472661}
    P7 = {122.852186 ; 67.47912979}
    P8 = {98.86965477 ; 94.36949583}
    P9 = {87.13065642 ; 73.02573718}

    Pourriez vous m'aider à comprendre comment fonctionne ce calcul lorsque les B-Splines sont de multiplicité non nul ?

    La B-Spline que je donne en exemple provient d'un fichier DXF que j'ai décortiqué. Voici l'image de celle ci ouvert sous EDrawing :



    Merci d'avance

    -----

  2. #2
    Paraboloide_Hyperbolique

    Re : B-Spline avec multiplicité

    Bonsoir,

    A priori votre formule a l'air correcte. Je confirme aussi que si le dénominateur vaut zéro, alors on considère que tout le terme vaut zéro.

    Cependant, cette approche n'est pas la plus rapide, ni la plus aisée pour calculer une courbe B-spline. L'algorithme de Cox de Boor est bien plus pratique. Vous en trouverez un exemple simplifié à la page 95 du document suivant:

    http://www.cgeo.ulg.ac.be/CAO/CAD_04.pdf

  3. #3
    invite1de74a73

    Re : B-Spline avec multiplicité

    Tout d'abord merci de votre réponse.

    j'était déjà tomber sur ce document. Mais je ne comprend pas trop la différence entre ma formule et cet algorithme.

    sachant que je part de cette formule pour arriver au pseudo code suivant :

    fonction CalculeDePoint(t) : POINT
    Code:
    n = nombre_de_noeud_max -1
    p = degre_de_la_BSpline
    
    point.x = 0; 
    point.y = 0; 
    facteur=0;
    pour ( i variant de 0 à (n-p-1) par pas de 1)
    {
    facteur = NDI(p,i,t) point.x = facteur*pointControl[i].x point.y = facteur*pointControl[i].y
    }

    fonction NDI(d,i,t)
    Code:
    facteur =0
    SI ( d=0)
    {
    SI ( noeud[i] plus petit ou egal à t qui est plus petit ou egal a noeud[i+1] {
    facteur =1
    } SINON {
    facteur =0
    }
    } SINON SI ( noeud[i] plus petit ou egal à t qui est plus petit ou egal à noeud[i+d+1]) {
    facteur =0
    } SINON {
    SI ( noeud[i+d]-noeud[i]=0) {
    facteur =0
    } SINON {
    facteur =((t- noeud[i])/(noeud[i+d]-noeud[i]))* NDI(d-1,i,t)
    } SI ((noeud[i+d+1]-noeud[i+1])=0) {
    facteur = facteur + 0
    } SINON {
    facteur = facteur + ((noeud[i+d+1]-t)/(noeud[i+d+1]-noeud[i+1]))* NDI(d-1,i+1,t
    )
    } retourne facteur

  4. #4
    Paraboloide_Hyperbolique

    Re : B-Spline avec multiplicité

    Bonsoir,

    Strictement parlant, votre formule et cet algorithme sont équivalents (et heureusement !) Il est tout à fait possible de passer directement par l'évaluation des fonctions de forme (vos NDI) comme vous le faites. Cependant, cet algorithme est général (nœuds de multiplicités quelconques, degré entier positif arbitraire), plus simple à coder et plus rapide; quoique moins intuitif que votre démarche*.
    Il est aussi possible de passer par l'évaluation de différences divisées de fonctions "puissances tronquées " (cela se fait parfois).

    *Comprendre l'algorithme dont je vous ais donné la référence nécessite de lire les quelques pages précédentes, surtout pour fixer les notations.

    Une petite remarque: dans votre code, les ne sont pas correctement définis. Pour respecter la définition de de Boor**, c'est:

    Code:
    SI ( d=0)
    {
    SI ( noeud[i] plus petit ou egal à t qui est strictement plus petit a noeud[i+1] {
    facteur =1
    } SINON {
    facteur =0
    }
    }
    **C. De Boor, “On calculating with B-splines,” J. Approx. Theory, vol. 62, pp. 50–62, 1972. (Équation 6, page 51.)

  5. A voir en vidéo sur Futura

Discussions similaires

  1. Interpolation Polynomiale et spline quadratique
    Par invite814275d1 dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 22/04/2013, 10h48
  2. Matlab : spline
    Par invite7f58f807 dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 31/01/2011, 01h16
  3. Trouver la multiplicité d'une maille avec ses vecteurs
    Par invite939f8b18 dans le forum Chimie
    Réponses: 2
    Dernier message: 29/01/2008, 13h46
  4. Spline
    Par invite769a1844 dans le forum Mathématiques du supérieur
    Réponses: 7
    Dernier message: 10/01/2008, 14h28
  5. Probleme avec la multiplicité des racines. Polynome
    Par invite30649c91 dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 16/09/2007, 18h57