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 :

Fonction d'intersection segment de droite et cercle


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 18
    Points : 16
    Points
    16
    Par défaut Fonction d'intersection segment de droite et cercle
    Bonjour,

    J'ai pas mal cherche mais je ne trouve pas...

    Je dispose de du centre et du rayon du cercle, des points a et b du segment.
    Mon problème est de trouver un code (en c) le plus efficace pour savoir si il y a une intersection entre le cercle et le segment.
    Cette fonction doit retourner vrai si il y a intersection ou si le segment est dans le cercle.

    Voilà, merci d'avance...

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 106
    Points : 153
    Points
    153
    Par défaut
    Le probleme c'est plutot de connaitre la distance minimale entre un point (le centre de ton cercle) et une droite. Si celle ci est inferieur au rayon du cercle, alors il y a intersection.

    http://mathworld.wolfram.com/Point-L...mensional.html

    http://local.wasp.uwa.edu.au/~pbourk...try/pointline/

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 18
    Points : 16
    Points
    16
    Par défaut
    Voilà ce que j'ai trouvé comme solution donc si quelqu'un trouve un moyen d'optimiser ce code, je suis preneur.

    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 double real_t;
    typedef struct point_t{
        real_t x,y;
    }point_t;
    typedef unsigned char bool_t;
     
    bool_t intersect_segment_cercle(point_t *pt1, point_t *pt2, point_t *center, real_t ray){
        real_t x,y;
     
        // Le point pt1 appartient-il au cercle ?
        x = pt1->x - center->x;
        y = pt1->y - center->y;
        if(sqrt(y*y+(-x)*(-x)) <= ray)
            return 1;
     
        // Le point pt2 appartient-il au cercle ?
        x = pt2->x - center->x;
        y = pt2->y - center->y;
        if(sqrt(y*y+(-x)*(-x)) <= ray)
            return 1;
     
        // Calcul de la distance minimum entre le centre du cercle et la droite
        x = pt2->x - pt1->x;
        y = pt2->y - pt1->y;
        real_t d = fabs(y*center->x + (-x)*center->y + (x * pt1->y - y * pt1->x)) / sqrt(y*y+(-x)*(-x));
     
        // Y a-t-il intersection entre le cercle et la droite passant par les points pt1 et pt2 ?
        // Si oui, on teste si les abscisse points pt1 pt2 sont de chaque côté de l'abscisse du centre 
        // ou si les ordonnées points pt1 pt2 sont de chaque côté de l'ordonnée du centre
        if(d <= ray 
           && ((pt1->x < center->x && center->x < pt2->x)
                || (pt1->y < center->y && center->y < pt2->y)
                || (pt1->x > center->x && center->x > pt2->x)
                || (pt1->y > center->y && center->y > pt2->y)))
            return 1;
        else
            return 0;
    }

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    voir forum Algorithmes -> Maths

Discussions similaires

  1. Intersection entre segment et cercle
    Par chadliii dans le forum Mathématiques
    Réponses: 15
    Dernier message: 03/10/2019, 18h52
  2. Intersection d'une droite et d'un cercle
    Par fungio dans le forum Général Java
    Réponses: 1
    Dernier message: 05/12/2009, 00h31
  3. Création d'un segment de droite
    Par bahiatoon dans le forum C++Builder
    Réponses: 9
    Dernier message: 02/03/2007, 14h42
  4. Intersection d'une droite et d'un plan
    Par Snark dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 14/12/2005, 19h24
  5. Intersection entre 1 droite et un parallélépipède rectangle
    Par mathieu_t dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 25/05/2005, 18h29

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