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 :

un point à l'interieur d'un polygone


Sujet :

C#

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 11
    Points : 5
    Points
    5
    Par défaut un point à l'interieur d'un polygone
    j'ai dessiné dans une picturebox un polygone avec le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Graphics g = e.Graphics;
    {
    Point[] points = { new Point(ax, ay), new Point(bx, by), new Point(cx, cy), new Point(dx, dy), new Point(ex, ey) };
    g.FillPolygon(new SolidBrush(Color.Azure), points);
    }
    je veux savoir si il y a une méthode pour savoir si un point(x,y) est à l’intérieur du polygone,

    merci.

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    salut

    Avec l'objet graphicalPath, tu peux créer un contour et demander si un objet se trouve dedans. Je pense que c'est la solution la plus facile, rapide et simple à faire pour ton problème
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    merci theMonz31

    mais comment créer le contour avec l'objet graphicalPath,

  4. #4
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    C'est GraphicsPath en fait, MSDN est encore à la ramasse malheureusement. Il doit bien y avoir des exemples. Sinon c'est le même principe que le svg : tu pars d'un point et tu utilises des AddLine(x, y), AddArc, etc...

    A défaut, on peut aussi faire ça manuellement, vraiment rien de sorcier : Point in polygon problem (Wikipedia).

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    merci DonQuiche

  6. #6
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut pt in polygon ,methode avec graphicsPath
    bonjour youcef le virus

    avec ^le "versatile" graphicsPath qui fait enormement de chose.
    voici comment...
    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
     
     
    'ta liste de point est cree ailleurs dans la gestion 
    'de la succession Mousedown-Mouseup
    Imports System.Drawing.Drawing2D
    Public Class Polygone
        Public lstPoints As List(Of Point)
        Public PenWidth As Single
        Public Sub DrawPolygone(ByVal g As Graphics, ByVal c As Color)
            Dim p As Pen = New Pen(c, PenWidth)
            g.DrawPolygon(p, lstPoints.ToArray)
            p.Dispose()
        End Sub
        Public Function IsInPolygone(ByVal ptTest As Point) As Boolean
            Dim p As Pen = New Pen(Color.Black, PenWidth)
            If Me.lstPoints.Count = 0 Then Return False
            Dim monPath As GraphicsPath = New GraphicsPath()
            monPath.AddPolygon(lstPoints.ToArray)
            'ajoute un contour supplementaire pour plus de surete
            monPath.Widen(p)
            p.Dispose()
            'methode IsVisible de GraphicsPath
            If (monPath.IsVisible(ptTest)) Then
                Return True
            End If
            Return False
        End Function
    End Class
    La methode est valable pour n'importe quelle figure de base (rectangle,ellipse,line,bezier etc ....) et meme pour une figure complique ou personnalise "myfigure" cree elle-meme... avec ce diabolique graphicsPath
    qui teste sa propre "myfigure".....
    bon code.....

  7. #7
    Membre averti Avatar de Jerede
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2010
    Messages : 271
    Points : 422
    Points
    422
    Par défaut
    J'utilise ça moi

    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
           //Copyright (c) 1995-1996 Galacticomm, Inc.  Freeware source code. 
            public static bool PointInPoly(Point p, Point[] poly)
            {
                int xnew, ynew;
                int xold, yold;
                int x1, y1;
                int x2, y2;
                bool inside = false;
     
                if (poly.Length < 3)
                    return false;
     
                xold = poly[poly.Length - 1].X;
                yold = poly[poly.Length - 1].Y;
     
                foreach (var t in poly)
                {
                    xnew = t.X;
                    ynew = t.Y;
     
                    if (xnew > xold)
                    {
                        x1 = xold;
                        x2 = xnew;
                        y1 = yold;
                        y2 = ynew;
                    }
                    else
                    {
                        x1 = xnew;
                        x2 = xold;
                        y1 = ynew;
                        y2 = yold;
                    }
     
                    if ((xnew < p.X) == (p.X <= xold) && (p.Y - (long)y1) * (x2 - x1) < (y2 - (long)y1) * (p.X - x1))
                    {
                        inside = !inside;
                    }
                    xold = xnew;
                    yold = ynew;
                }
                return inside;
            }

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    merci Jerede et MABROUKI.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    905
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 905
    Points : 85
    Points
    85
    Par défaut
    La méthode fonctionne.
    J' en avais besoin.

    Merci

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

Discussions similaires

  1. Tester si un point est présent dans un polygone
    Par habasque dans le forum 2D
    Réponses: 11
    Dernier message: 26/09/2007, 16h00
  2. point ou non dans un polygone quelconque
    Par Mandarine dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 11/06/2006, 03h03
  3. point à l'interieur d'un polygone(3D-équations paramétriques
    Par chonos dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 10/12/2005, 19h24
  4. Savoir si un point est inclus dans un polygone quelconque
    Par SuperBIBI dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 02/08/2005, 19h02
  5. [Algo] Point à l'intérieur d'un polygone ?
    Par kebby dans le forum C++Builder
    Réponses: 5
    Dernier message: 23/05/2003, 13h22

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