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

SDL Discussion :

Tracer une droite passant par 2 points


Sujet :

SDL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Tracer une droite passant par 2 points
    Bonjour!

    Je commence un petit programme en C avec la SDL qui me permet d'afficher des lignes.

    J'utilise ce code directement pris sur le site:
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    void echangerEntiers(int* x, int* y)
    {
      int t = *x;
      *x = *y;
      *y = t;
    }
     
    void ligne(int x1, int y1, int x2, int y2, Uint32 coul)
    {
      int d, dx, dy, aincr, bincr, xincr, yincr, x, y;
     
      if (abs(x2 - x1) < abs(y2 - y1)) {
        /* parcours par l'axe vertical */
     
        if (y1 > y2) {
          echangerEntiers(&x1, &x2);
          echangerEntiers(&y1, &y2);
        }
     
        xincr = x2 > x1 ? 1 : -1;
        dy = y2 - y1;
        dx = abs(x2 - x1);
        d = 2 * dx - dy;
        aincr = 2 * (dx - dy);
        bincr = 2 * dx;
        x = x1;
        y = y1;
     
        setPixelVerif(x, y, coul);
     
        for (y = y1+1; y <= y2; ++y) {
          if (d >= 0) {
    	x += xincr;
    	d += aincr;
          } else
    	d += bincr;
     
          setPixelVerif(x, y, coul);
        }
     
      } else {
        /* parcours par l'axe horizontal */
     
        if (x1 > x2) {
          echangerEntiers(&x1, &x2);
          echangerEntiers(&y1, &y2);
        }
     
        yincr = y2 > y1 ? 1 : -1;
        dx = x2 - x1;
        dy = abs(y2 - y1);
        d = 2 * dy - dx;
        aincr = 2 * (dy - dx);
        bincr = 2 * dy;
        x = x1;
        y = y1;
     
        setPixelVerif(x, y, coul);
     
        for (x = x1+1; x <= x2; ++x) {
          if (d >= 0) {
    	y += yincr;
    	d += aincr;
          } else
    	d += bincr;
     
          setPixelVerif(x, y, coul);
        }
      }    
    }
    Cela marche très bien si on veut tracer un segment, mais je voudrais tracer une droite...

    J'ai essayé de modifier la fonction pour qu'elle trace une droite passant par les 2 points mais sans succès.

    Si quelqu'un a une petite idée

    Merci d'avance!

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 579
    Points
    218 579
    Billets dans le blog
    120
    Par défaut
    Est ce que vous voulez vous limiter à des droites horizontales ou verticales, ou non?

    Car si ce sont des droites verticales ou horizontales ça peut être simple.

    Deuxième question piège, pourquoi ne pas donner comme coordonnées du segment les bord de la fenêtre, cela fera comme une droite :p.

    Sinon, pour tout type de droite, il faut calculer son inclinaison et faire en sorte de progresser la droite grace à l'inclinaison.
    Formule du droite x = a + bi
    ( Si je me rapelle bien )
    i sera l'inclinaison
    a sera la hauteur de la droite en zero ( x = 0 ; y = a )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Deuxième question piège, pourquoi ne pas donner comme coordonnées du segment les bord de la fenêtre, cela fera comme une droite :p.
    Ca marche parfaitement
    Ce n'est peut être pas la solution la plus "correcte" mais tant que ça fonctionne...

    Merci beaucoup

  4. #4
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par LaTo59 Voir le message
    Ca marche parfaitement
    Ce n'est peut être pas la solution la plus "correcte" mais tant que ça fonctionne...

    Merci beaucoup
    D'un point de vue théorique, c'est impossible de demander à l'ordinateur de tracer ta droite puisque cela part de l'infini et arrive à l'infini.

    Par contre, s'arrêter sur les bords de la fenêtre fonctionne puisque c'est tout ce que l'utilisateur verra.

    C'est donc la bonne méthode, dépendant de la précision du calcul des limites, il est généralement bon de dessiner un peu plus que les bords.

    Jc

Discussions similaires

  1. Tracer une courbe de Bézier passant par 5 points définis
    Par sara.ber dans le forum Mathématiques
    Réponses: 3
    Dernier message: 07/05/2022, 12h12
  2. Réponses: 3
    Dernier message: 20/10/2013, 20h23
  3. tracer une droite donnée par son équation 3D
    Par socco dans le forum MATLAB
    Réponses: 3
    Dernier message: 28/05/2013, 10h37
  4. Droite perpendiculaire à une autre passant par un point
    Par salihovic dans le forum Mathématiques
    Réponses: 2
    Dernier message: 23/12/2009, 14h06
  5. [math] equ sinusoide passant par deux points
    Par ddams dans le forum Mathématiques
    Réponses: 11
    Dernier message: 24/05/2003, 14h12

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