IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Courbe qui relie 4 points - interpolation


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2003
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 106
    Par défaut Courbe qui relie 4 points - interpolation
    Bonjour,

    Je recherche un algorithme d'interpolation entre 4 points de façon à définir une courbe (pas une ligne brisée, mais quelque chose d'un peu arrondi). Ces 4 points se caractérisent par leurs coordonnées 3D (x,y,z).

    est-ce-que quelqu'un a un peu d'experience dans ce domaine?

    merci

  2. #2
    Membre éclairé Avatar de Soulama
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 619
    Par défaut
    Salut,
    ca ressamble au Courbe de Bezier peut etre? Google est ton amis

  3. #3
    Membre très actif
    Avatar de octal
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 441
    Par défaut
    Citation Envoyé par Soulama
    Salut,
    ca ressamble au Courbe de Bezier peut etre? Google est ton amis
    C'est exactement cela qu'il faut ... tu trouvera des exemples de sources Delphi sur le site http://www.efg2.com/Lab/Library/Delp...phics/Math.htm

    Bon courage

  4. #4
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Salut!

    J'ai 'un code de test de courbe bézier...

    http://sub0.developpez.com/delphi/bezier.zip

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2003
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 106
    Par défaut
    Merci à tous,

    J'ai trouvé mon bonheur en adaptant le code d'une applet java trouvée là:
    http://www.math.ucla.edu/~baker/java/hoefer/Spline.htm

    a+

    David

  6. #6
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    Salut

    bon j'arrive visiblement trop tard, mais je poste quand même sait-on jamais

    J'avais fais ce code en C à une époque (lointaine), spécialement optimisé pour la vitesse d'affichage.
    Je ne sais pas si on peut appeler ca courbe de Bézier, mais ca y ressemble très fortement.
    La fonction trace une courbe d'un point A à un point B, avec une tension vers le point I (mais ca ne passe pas par le point I).
    La précision de la courbe peut être paramétrée avec la var. 'prec'.
    si prec = 3, alors il sera tracé 2^3=8 segments forment la courbe entre A et B. (ce sont donc des lignes et non des points qui sont affichées).

    donc code en C à adapter...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    void affiche_bezier( signed x1,signed y1,signed xi, signed yi,
                         signed x2,signed y2,uchar couleur)
      {
      char     chaine[100];
      long     inc1x,inc2x;
      long     inc1y,inc2y;
      long     vx1,vx2,vy1,vy2;
      long     x,y,xc,yc;
      unsigned i;
     
      // Incr‚ments sur les deux segments de l'armature
      inc1x = ( (long)(xi-x1) <<16) >> prec;
      inc2x = ( (long)(x2-xi) <<16) >> prec;
      inc1y = ( (long)(yi-y1) <<16) >> prec;
      inc2y = ( (long)(y2-yi) <<16) >> prec;
     
      // Position variante sur les deux segments 1 et 2
      vx1=long(x1)<<16; vy1=long(y1)<<16;
      vx2=long(xi)<<16; vy2=long(yi)<<16;
      x=vx1;
      y=vy1;
     
      // Segment variant porteur des points (de coord [(dx1,dy1),(dx2,dy2)] )
      for (i=1;i<(1<<prec);i++)
        {
        xc=x; yc=y;
        vx1+=inc1x; vy1+=inc1y;
        vx2+=inc2x; vy2+=inc2y;
        x=vx1+ ( (vx2-vx1)*i >> prec );
        y=vy1+ ( (vy2-vy1)*i >> prec );
        qline(xc>>16,yc>>16,x>>16,y>>16,couleur);
        }
     
      qline(x>>16,y>>16,x2,y2,couleur); // le dernier segment
     
      }
    si ca sert pas, tant pis
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tracer une courbe gracieuse entre 2 points ?
    Par supergrey dans le forum Mathématiques
    Réponses: 22
    Dernier message: 17/07/2009, 10h03
  2. reconnaissance courbe dans nuage de points
    Par Elodie31 dans le forum Mathématiques
    Réponses: 4
    Dernier message: 25/06/2008, 08h27
  3. Tracer courbe avec coordonnées de points
    Par ddsjm dans le forum MATLAB
    Réponses: 6
    Dernier message: 10/12/2006, 21h02
  4. Réponses: 2
    Dernier message: 14/08/2006, 10h41
  5. Réponses: 5
    Dernier message: 05/05/2006, 14h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo