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

C Discussion :

Calculer point intersection droite


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 32
    Points : 17
    Points
    17
    Par défaut Calculer point intersection droite
    Salut,
    Je dois faire un programme qui permet de calculer le point d'intersection de deux droites.
    On saisit manuellement le coefficient de chacune des droites et l'ordonnée à l'rogine.
    Mais ca marche pas .
    Pouvez vous m'aider svp.
    Voici le code :
    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
    #include <stdio.h>
     
    void coeff(float *b,float *dir);
    void intersection(float *a1,float *a2, float *b1, float *b2,float *x,float *y);
     
    void main()
    {
     
     
    	float a1,a2,b1,b2,x,y;
     
    	coeff(&b1,&a1);
    	coeff(&b2,&a2);
    	intersection(&a1,&a2,&b1,&b2,&x,&y);
    	printf ("Point d'intersection X = %f et Y = %f",&x,&y);
    }
     
     
     
    void coeff(float *b,float *dir)
    {
     
    	printf("Tapez le coefficient directeur de la droite :");
    	scanf("%f",&dir);
    	printf("Tapez l'ordonnee a l'origine de la droite :");
    	scanf("%f",&b);
     
    }
     
    void intersection(float *a1,float *a2, float *b1, float *b2,float *x,float *y)
    {
     
    	*y = (*b2-*b1)/(*a1-*a2);
    	*x = ((*y)-*b1)/(*a1);
    }

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    1-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void coeff(float *b,float *dir)
    {
     
    	printf("Tapez le coefficient directeur de la droite :");
    	scanf("%f",dir);
    	printf("Tapez l'ordonnee a l'origine de la droite :");
    	scanf("%f",b);
     
    }
    2- La représentation choisie (coefficient directeur + ordonnée à l'origine)ne permet pas la représentation des droites parallèles à l'axe des ordonnées

    3-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void intersection(float *a1,float *a2, float *b1, float *b2,float *x,float *y)
    {
     
    	*y = (*b2-*b1)/(*a1-*a2);
    	*x = ((*y)-*b1)/(*a1);
    }
    - Pourquoi passer des adresses pour a1, b1, a2, b2 ? C'est inutile.
    - Et les divisions par 0 ?
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 32
    Points : 17
    Points
    17
    Par défaut
    Avant toute chose je tiens à te remercier pour ton aide.
    Pour le programme c'est qu'un ébauche donc il est loin d'être au point surtout pour la division par 0.
    Donc si j'ai bien compris, quand on fait un scanf avec un pointeur on marque juste son nom sans le "&" devant?

    Sinon je viens de corriger cela mais ça marche toujours pas :s.
    Il me mette que X=0 et Y=0 aussi.
    Merci

  4. #4
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Donc si j'ai bien compris, quand on fait un scanf avec un pointeur on marque juste son nom sans le "&" devant?
    scanf attend l'adresse du destinataire. Pour ta fonction coeff, les arguments sont déjà l'adresse du destinataire.
    Si tu écris l'adresse du destinataire est l'adresse de la variable locale dir
    [EDIT]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf ("Point d'intersection X = %f et Y = %f",x,y);
    printf demande les valeurs à afficher, pas l'adresse des valeurs !
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 32
    Points : 17
    Points
    17
    Par défaut
    Ok merci.
    Par contre mon programme marche toujours pas .
    Je sais pas d'où ça vient.
    Merci encore

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 32
    Points : 17
    Points
    17
    Par défaut
    C'est bon je viens de trouver mon erreur.
    Merci encore

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par cetiop Voir le message
    Je dois faire un programme qui permet de calculer le point d'intersection de deux droites.
    On saisit manuellement le coefficient de chacune des droites et l'ordonnée à l'origine.
    Mais ca marche pas .
    Pouvez vous m'aider svp.
    Voici le code :
    Un bon réglage du compilateur permet de de voir certaines erreurs :
    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
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c:7: warning: function declaration isn't a prototype
    main.c:7: warning: return type of 'main' is not `int'
    main.c: In function `main':
    main.c:15: warning: double format, pointer arg (arg 2)
    main.c:15: warning: double format, pointer arg (arg 3)
    main.c: In function `coeff':
    main.c:24: warning: float format, pointer arg (arg 2)
    main.c:26: warning: float format, pointer arg (arg 2)
    Linking console executable: console.exe
    Process terminated with status 0 (0 minutes, 4 seconds)
    0 errors, 6 warnings
    Je recommande
    • d'utiliser double pour faire les calculs
    • de n'utiliser les pointeurs que si c'est utile.
    • de mettre un préfixe 'p' ou 'p_' devant les identificateurs de pointeurs.

    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
     
    #include <stdio.h>
     
    void coeff (double *pb, double *pdir)
    {
       printf ("Tapez le coefficient directeur de la droite :");
       scanf ("%lf", pdir);
       printf ("Tapez l'ordonnee a l'origine de la droite :");
       scanf ("%lf", pb);
    }
     
    void intersection (double  a1, double  a2, double  b1,
                       double  b2, double *px, double *py)
    {
       *py = (b2 - b1) / (a1 - a2);
       *px = ((*py) - b1) / (a1);
    }
     
    int main (void)
    {
       double a1, a2, b1, b2, x, y;
     
       coeff (&b1, &a1);
       coeff (&b2, &a2);
       intersection (a1, a2, b1, b2, &x, &y);
       printf ("Point d'intersection X = %f et Y = %f", x, y);
     
       return 0;
    }
    Pas de Wi-Fi à la maison : CPL

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Je recommande
    • d'utiliser double pour faire les calculs
    • de n'utiliser les pointeurs que si c'est utile.
    • de mettre un préfixe 'p' ou 'p_' devant les identificateurs de pointeurs.
    Et moi je rajouterais de regrouper les éléments qui vont ensemble dans une structure => ça allège le code (surtout lorsqu'on passe tous les éléments aux diverses fonctions) et accessoirement ça évite de se tromper quand on réécrit le calcul du point d'intersection en C
    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
    typedef struct {
        double coeff;
        double ordo;
    } t_equDroite;
     
    typedef struct {
        double x;
        double y;
    } t_point;
     
    #include <stdio.h>
     
    void coeff (t_equDroite *d)
    {
       printf ("Tapez le coefficient directeur de la droite :");
       scanf ("%lf", &d->coeff);
       printf ("Tapez l'ordonnee a l'origine de la droite :");
       scanf ("%lf", &d->ordo);
    }
     
    void intersection (t_equDroite *d1, t_equDroite *d2, t_point *res)
    {
       res->x = (d2->ordo - d1->ordo) / (d1->coeff - d2->coeff);
       res->y = res->x * d1->coeff + d1->ordo;
    }
     
    int main (void)
    {
       t_equDroite d1, d2;
       t_point res;
     
       coeff (&d1);
       coeff (&d2);
       intersection (&d1, &d2, &res);
       printf ("Point d'intersection X = %f et Y = %f", res.x, res.y);
     
       return 0;
    }
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/03/2012, 19h06
  2. calculer l'intersection d'une droite et un point
    Par zarbiman dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 04/07/2008, 19h01
  3. Réponses: 2
    Dernier message: 24/05/2008, 21h54
  4. Appartenance d'un point à une droite
    Par x0rster dans le forum C
    Réponses: 3
    Dernier message: 31/03/2007, 23h33
  5. Intersection droite-plan
    Par Finch dans le forum OpenGL
    Réponses: 2
    Dernier message: 25/04/2005, 13h05

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