begin process at 2012 02 08 08:54:34
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

Multimédia

 > 

courbe de bezier


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

courbe de bezier

vendredi 13 juin 2008 à 10:39:28 | courbe de bezier

bekha



beman
vendredi 13 juin 2008 à 11:34:59 | Re : courbe de bezier
vendredi 13 juin 2008 à 12:53:10 | Re : courbe de bezier

coucou747

Administrateur CodeS-SourceS
sur wikipedia t'as une explication claire et des formules pour ces courbes.
vendredi 13 juin 2008 à 22:45:31 | Re : courbe de bezier

ango973

Salut,

voila un code en c que j'ai realisé il y a pas longtemps sur ces courbe avec la SDL

/* Courbe de Bézier
by Ango973 */

#include <stdio.h>
#include <stdlib.h>
#include <SDL\SDL.h>

void pause();

void ligne(int x0,int y0, int x1,int y1, Uint32 c);

void putpixel(int xe, int ye, Uint32 couleur);

void bezier (int xa, int ya, int xb, int yb, int xc, int yc, int xd, int yd, int n);


SDL_Surface *ecran = NULL;

Uint32 color;




int main(int argc, char *argv[]){

    Uint32 color_screen;


    SDL_Init(SDL_INIT_VIDEO);

    ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE);
    color_screen = SDL_MapRGB(ecran->format,255,255,255);

    SDL_WM_SetCaption("Courbe de Brezier !", NULL);
    SDL_FillRect(ecran,0,color_screen);

    SDL_Flip(ecran);


    bezier(150,450,220,300,300,50,660,500,4);

    pause();

    SDL_Quit();

    return EXIT_SUCCESS;
}


void bezier (int xa, int ya, int xb, int yb, int xc, int yc, int xd, int yd, int n)
{
    int xab, yab, xbc, ybc, xcd, ycd, xabc, yabc, xbcd, ybcd, xg, yg;

    color = SDL_MapRGB(ecran->format,183,111,255);

    if (n == 0){

        ligne(xa,ya,xb,yb,color);
        ligne(xb,yb,xc,yc,color);
        ligne(xc,yc,xd,yd,color);

        SDL_Flip(ecran);

    }
    else{
        xab = (xa + xb)/2;
        yab = (ya + yb)/2;
        xbc = (xb + xc)/2;
        ybc = (yb + yc)/2;
        xcd = (xc + xd)/2;
        ycd = (yc + yd)/2;
        xabc = (xab + xbc)/2;
        yabc = (yab + ybc)/2;
        xbcd = (xbc + xcd)/2;
        ybcd = (ybc + ycd)/2;
        xg = (xabc + xbcd)/2;
        yg = (yabc + ybcd)/2 ;

        bezier(xa,ya,xab,yab,xabc,yabc,xg,yg,n-1) ;
        bezier(xg,yg,xbcd,ybcd,xcd,ycd,xd,yd,n-1) ;
    }
}


void pause()
{
    int continuer = 1;
    SDL_Event event;

    while (continuer)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
            case SDL_QUIT:
                continuer = 0;
        }
    }
}

void putpixel(int xe, int ye, Uint32 couleur)
{
    Uint32 * numerocase;

    numerocase = (Uint32 *)(ecran->pixels) + xe + ye * ecran->w;
    *numerocase = couleur;
}

void ligne(int x0,int y0, int x1,int y1, Uint32 c)
{
    int dx,dy,x,y,residu,absdx,absdy,pasx,pasy,i;

    dx = x1 - x0;
    dy = y1 - y0;
    residu = 0;   /* il s'agit d'une division euclidienne, avec quotient et reste */
    x = x0;
    y = y0;
    putpixel(x,y,c);

    if (dx > 0){
        pasx = 1;
    }
    else{
        pasx = -1;
    }

    if (dy > 0){
        pasy = 1;
    }
    else{
        pasy = -1;
    }

    absdx = abs(dx);
    absdy = abs(dy);

    if (dx == 0){
        for(i = 0; i < absdy; i++) {
              y += pasy;
              putpixel(x,y,c);
        }
    }
    else{
      if(dy == 0) {
        for(i = 0;i < absdx; i++){
             x += pasx;
             putpixel(x,y,c);
        }
      }
      else{
        if (absdx == absdy){
            for(i = 0; i < absdx; i++) {
                x += pasx;
                y += pasy;
                putpixel(x,y,c);
            }
        }
        else{
          if (absdx > absdy){
              for(i=0;i<absdx;i++){
                  x += pasx;
                  residu += absdy;
                  if(residu >= absdx) {
                      residu -= absdx;
                      y += pasy;
                  }
                  putpixel(x,y,c);
              }
          }
          else{
            for(i=0;i<absdy;i++){
                y += pasy;
                residu += absdx;
                if (residu>=absdy){
                    residu -= absdy;
                    x += pasx;
                }
                putpixel(x,y,c);
            }
          }
        }
      }
    }
}


Ango973
vendredi 13 juin 2008 à 22:45:33 | Re : courbe de bezier

ango973

Salut,

voila un code en c que j'ai realisé il y a pas longtemps sur ces courbe avec la SDL

/* Courbe de Bézier
by Ango973 */

#include <stdio.h>
#include <stdlib.h>
#include <SDL\SDL.h>

void pause();

void ligne(int x0,int y0, int x1,int y1, Uint32 c);

void putpixel(int xe, int ye, Uint32 couleur);

void bezier (int xa, int ya, int xb, int yb, int xc, int yc, int xd, int yd, int n);


SDL_Surface *ecran = NULL;

Uint32 color;




int main(int argc, char *argv[]){

    Uint32 color_screen;


    SDL_Init(SDL_INIT_VIDEO);

    ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE);
    color_screen = SDL_MapRGB(ecran->format,255,255,255);

    SDL_WM_SetCaption("Courbe de Brezier !", NULL);
    SDL_FillRect(ecran,0,color_screen);

    SDL_Flip(ecran);


    bezier(150,450,220,300,300,50,660,500,4);

    pause();

    SDL_Quit();

    return EXIT_SUCCESS;
}


void bezier (int xa, int ya, int xb, int yb, int xc, int yc, int xd, int yd, int n)
{
    int xab, yab, xbc, ybc, xcd, ycd, xabc, yabc, xbcd, ybcd, xg, yg;

    color = SDL_MapRGB(ecran->format,183,111,255);

    if (n == 0){

        ligne(xa,ya,xb,yb,color);
        ligne(xb,yb,xc,yc,color);
        ligne(xc,yc,xd,yd,color);

        SDL_Flip(ecran);

    }
    else{
        xab = (xa + xb)/2;
        yab = (ya + yb)/2;
        xbc = (xb + xc)/2;
        ybc = (yb + yc)/2;
        xcd = (xc + xd)/2;
        ycd = (yc + yd)/2;
        xabc = (xab + xbc)/2;
        yabc = (yab + ybc)/2;
        xbcd = (xbc + xcd)/2;
        ybcd = (ybc + ycd)/2;
        xg = (xabc + xbcd)/2;
        yg = (yabc + ybcd)/2 ;

        bezier(xa,ya,xab,yab,xabc,yabc,xg,yg,n-1) ;
        bezier(xg,yg,xbcd,ybcd,xcd,ycd,xd,yd,n-1) ;
    }
}


void pause()
{
    int continuer = 1;
    SDL_Event event;

    while (continuer)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
            case SDL_QUIT:
                continuer = 0;
        }
    }
}

void putpixel(int xe, int ye, Uint32 couleur)
{
    Uint32 * numerocase;

    numerocase = (Uint32 *)(ecran->pixels) + xe + ye * ecran->w;
    *numerocase = couleur;
}

void ligne(int x0,int y0, int x1,int y1, Uint32 c)
{
    int dx,dy,x,y,residu,absdx,absdy,pasx,pasy,i;

    dx = x1 - x0;
    dy = y1 - y0;
    residu = 0;   /* il s'agit d'une division euclidienne, avec quotient et reste */
    x = x0;
    y = y0;
    putpixel(x,y,c);

    if (dx > 0){
        pasx = 1;
    }
    else{
        pasx = -1;
    }

    if (dy > 0){
        pasy = 1;
    }
    else{
        pasy = -1;
    }

    absdx = abs(dx);
    absdy = abs(dy);

    if (dx == 0){
        for(i = 0; i < absdy; i++) {
              y += pasy;
              putpixel(x,y,c);
        }
    }
    else{
      if(dy == 0) {
        for(i = 0;i < absdx; i++){
             x += pasx;
             putpixel(x,y,c);
        }
      }
      else{
        if (absdx == absdy){
            for(i = 0; i < absdx; i++) {
                x += pasx;
                y += pasy;
                putpixel(x,y,c);
            }
        }
        else{
          if (absdx > absdy){
              for(i=0;i<absdx;i++){
                  x += pasx;
                  residu += absdy;
                  if(residu >= absdx) {
                      residu -= absdx;
                      y += pasy;
                  }
                  putpixel(x,y,c);
              }
          }
          else{
            for(i=0;i<absdy;i++){
                y += pasy;
                residu += absdx;
                if (residu>=absdy){
                    residu -= absdy;
                    x += pasx;
                }
                putpixel(x,y,c);
            }
          }
        }
      }
    }
}


Ango973
vendredi 13 juin 2008 à 22:47:54 | Re : courbe de bezier

ango973

Desolé d'avoir posté deux fois j'ai pas fait expré si tu as des questions n'hesite pas.

Ango973
samedi 14 juin 2008 à 03:39:59 | Re : courbe de bezier

coucou747

Administrateur CodeS-SourceS
moi j'ai fait ca :

http://www.javafr.com/codes/APPLET-POLYNOMES-INTERPOLATEURS-LAGRANGE-TROUVER-POLYNOME-DEGRE-PASSE_42417.aspx
et ca :
http://www.javafr.com/codes/COURBES-BEZIER-LATHES-POLYNOMES-INTERPOLATEURS-LAGRANGE_42665.aspx
mardi 5 mai 2009 à 20:41:32 | Re : courbe de bezier

blackberry32

Bonjour!

Je regarde ton programme Ango, mais je ne parviens pas a comprendre la logique de calcul de la fonction "bezier".
Quelqu'un pourrait il éclairer ma lanterne sil vous plait?

Merci :)


Cette discussion est classée dans : courbe, bezier


Répondre à ce message

Sujets en rapport avec ce message

Manipuler une courbe de bezier avec le phantom omni [ par bekha ] Bonjour à tous !! Suite à un problème de programmation de la courbe de bezier avec l'action de la phantom omni j'ai des erreurs que j'arrive pas à com courbe de bezier notion de vitesse [ par bekha ] Salut,en faite, j'ai un peu du mal à introduire la vitesse sur ma courbe de bezier je ne sait pas ou commencer, j'utilise le PHANToM OMNI pour un reto comment gerer la vitesse dans la courbe de bezier en c++ [ par bekha ] salut, en faite je suis un peu bloqué ayant programmé ma courbe de bezier je voulais ajouter la vitesse mais je sais comment on fait tout ce je sais c courbe en c [ par jiHANE886 ] Bonjour,J'ai un programme rédigé en C qui prend une série de points dans un fichier .dat et détermine l'équation de la courbe qui approxime le mieux c courbe [ par jiHANE886 ] Salut, pour un projet je dois traçer des courbes de la forme y=f(x) en ayant seulement recours au langage C mais je ne sais pas comment faire.Si quelq superposition d'un histogramme et d'une courbe [ par nadin6016 ] bonjour,qui peut m'aider svp à me montrer comment faire pour superposer un histogramme et une courbe.j'ai deux tableaux l'un représente les variations MFC : Tracer une courbe [ par zedzedzed ] Bonjour.Voila je suis un débutant en C++ et j'effectue un stage de developpement informatique.J'utilise Visual C++ version 6. Et mon maitre de stage m


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,451 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales