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

Développement 2D, 3D et Jeux Discussion :

[C] présence d'un point dans un polygone


Sujet :

Développement 2D, 3D et Jeux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Par défaut [C] présence d'un point dans un polygone
    Bonjour,
    Je dois développer un code qui teste la présence d'un point dans un polygône quelconque. Le point étant représenté par ses coordonnées (x,y) : on travaille dans un plan. Le polygône est représenté par une liste ordonnée de points qui permet sa construction : si les points sont P1,P2,P3,P4,P5, on relie d'abord P1 à P2, puis P2à P3... et enfin P5à P1.
    Tout ça doit être fait en C, mais si vous avez la moindre idée, ...
    Je vous remercie !

  2. #2
    Membre émérite
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Par défaut
    ce n'est pas tellement difficile

    Voilà une méthode :
    Tu aura besoin d'une fonction qui teste l'intersection de 2 segments.
    (genre tu utilise les equations de droite pr détecter l'intersection... tu as meme pas besoin de savoir le point exact dans ce cas là)

    Ensuite tu défini un nouveau segment depuis ton point jusqu'a n'importe quel point tres loin (en dehors du polygone) (genre un nouveau point vers les infini)

    Ensuite tu teste l'intersection de ce nouveau segment avec chacun des segments de ton polygone (P1P2, puis P2P3....)

    Si il y a intersection (ET UNE SEULE) alors tu es à l'intérieur. (donc faut les compter toutes pour etre sur car un nbre pair d'intersections sginifie que tu es en dehors)



    Autre méthode tu fait la somme des angles de ton point vers chaque point du polygone... si = 360 tu es dedans (enfin je crois)

  3. #3
    Membre confirmé Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Par défaut
    Citation Envoyé par Ange_blond
    Voilà une méthode :
    Tu aura besoin d'une fonction qui teste l'intersection de 2 segments.
    (genre tu utilise les equations de droite pr détecter l'intersection... tu as meme pas besoin de savoir le point exact dans ce cas là)

    Ensuite tu défini un nouveau segment depuis ton point jusqu'a n'importe quel point tres loin (en dehors du polygone) (genre un nouveau point vers les infini)

    Ensuite tu teste l'intersection de ce nouveau segment avec chacun des segments de ton polygone (P1P2, puis P2P3....)
    A préciser quand même que ce n'est pas pour un polygone quelconque mais convexe... Pour la deuxième méthode je ne sais pas (je suppose que c'est pareil non?). Sinon une autre méthode (plus rapide?), pour chaque arêtes : Soit P le point à tester, N la normale de l'arête, et A un point de l'arête, alors si le produit scalaire : N.AP >= 0 (Tout ce beau monde doit être normalisé), tu es à l'intérieur(de l'arête courante).

  4. #4
    Membre émérite
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Par défaut
    le test par intersection fonctionne pour n'importe quel type de polygone si je ne me trompe pas...

  5. #5
    Membre confirmé Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Par défaut
    Citation Envoyé par Ange_blond
    le test par intersection fonctionne pour n'importe quel type de polygone si je ne me trompe pas...
    Euh c'est que j'ai du mal comprendre lorsque tu disais :
    Citation Envoyé par Ange_blond
    Si il y a intersection (ET UNE SEULE) alors tu es à l'intérieur. (donc faut les compter toutes pour etre sur car un nbre pair d'intersections sginifie que tu es en dehors)
    Si le nombre d'intersections est impair alors en effet ca fonctionne pour n'importe quel type de polygone, en revanche si l'on s'arrête à "UNE SEULE" intersection alors ça ne fonctionne que pour les polygones convexes

  6. #6
    Membre confirmé Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Par défaut
    Citation Envoyé par Ange_blond
    Ensuite tu défini un nouveau segment depuis ton point jusqu'a n'importe quel point tres loin (en dehors du polygone) (genre un nouveau point vers les infini)
    Il me semble que dans ce cas il serait préférable de considérer l'intersection entre une droite horizontal (pourquoi s'embêter avec des points "très loin"...) et l'arête en question, ça devrait également facilité le calcul d'intersection

Discussions similaires

  1. Nombre maximum de point dans un polygon type geography
    Par blairswish dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 13/07/2010, 14h18
  2. Point dans un polygone 3D
    Par silfride dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 22/08/2008, 11h04
  3. Point dans un polygone
    Par kerinel dans le forum Mathématiques
    Réponses: 5
    Dernier message: 17/10/2007, 12h23
  4. Point dans un polygone
    Par titelisette dans le forum ASP
    Réponses: 7
    Dernier message: 03/05/2007, 17h08
  5. Point dans un polygone
    Par titelisette dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/04/2007, 11h51

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