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

Langage Java Discussion :

point appartient polyligne


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 19
    Par défaut point appartient polyligne
    bonjour,

    j'aimerais faire une fonction qui définit si un point appartient à une polyligne. Ma polyligne est constituée d'un tableau de points. Si le point est est un des points de la polyligne, je sais le définir mais si c'est un point qui est sur un des segments de la polyligne, je ne sais pas comment le faire.

    Merci d'avance pour l'aide.

    gracerare

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Ce n'est pas un problème de java que tu as mais d'algorithme (voire de connaissances mathématiques)...

    Recherche sur comment on vérifie qu'un point appartient à un segment donné, ce n'est pas dur.

    D'ailleurs, pour programmer de manière plus objet, tu pourrais créer une classe Segment ayant deux attributs de type Point (les extrémités), et une méthode (appartientAuSegment(Point) qui te renvoie un booléen)

    Ta polyligne serait alors une suite de Segments... Mais bon, c'est une implémentation de ton problème comme une autre, et elle n'est sans doute pas optimale pour le problème que tu as à résoudre, donc à toi de voir comment tu choisis d'implémenter ça
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Toutes les classes heritant de Line2D disposent de methodes permettant de detecter si un point appartient a une droite (attention a d'eventuels problemes de precisions, se laisser une marge d'erreur) et de retourner la distance d'un point a un segment.

    Ces classes de geometrie existent, autant les utiliser. Sinon l'autre alternative revient bien sur a faire les caculs directement soit-meme, dans ce cas pas il n'y a 36 solutions : rechercher des livres ou cours de math/geometrie de college/lycee... (ce qui est un peu couillon vu que c'est justement ce que fait Line2D...)
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 16
    Par défaut
    Bonjour,

    je réponds à ce forum parce que j'ai un problème assez similaire à ce que gracerare veut faire sauf que comme le recommande bouye, je n'utilise pas de Line2D mais ma propre classe Ligne qui est constituée d'un tableau d'entiers.

    Alors j'ai essayé de faire des calculs mais ça ne marche pas. J'ai sûrement dû me tromper quelque part mais je ne sais à quel niveau.

    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
     
    // p et pp sont les deux points de la ligne et ppp le point avec lequel on effectue la comparaison
     
    public boolean appLigne(MonPoint p, MonPoint pp, MonPoint ppp)
    {
    	boolean res=false;
    	float coef=0f; // coefficient directeur de la droite
    	float a=0f;
    	int xmin,xmax,ymin,ymax;
     
       coef = (float) ((float) (pp.y - p.y)) / ((float) (pp.x - p.x));
       a =  (float) ((p.y - (p.x * coef)) / 20f);
     
       int  verify = (int)  ((coef*ppp.x)+a);
       if(p.x<pp.x) {
    	   xmin=p.x;
    	   xmax=pp.x;   
       }
     
       else  xmin=pp.x;
       		 xmax=p.x;
     
       if(p.y<pp.y) {
    	   ymin=p.y;
    	   ymax=pp.y;
     
       }
       else  ymin=pp.y;
       ymax=p.y;
     
       if((ppp.y==verify) && (xmin<ppp.x) && (ppp.x<xmax) && (ymin<ppp.y) && (ppp.y<ymax)) {
    	   res = true;
     
       }
     
       return res;
    }
     
    public boolean contains(int x, int y) {
     
    boolean verif = false;
    MonPoint p = new MonPoint(x,y);
     
    	for(int i=0; i<this.size-1; i++){
    		if (appLigne(points[i],points[i+1],p)==true)
    			verif=true;
    	}
     
    	return verif;
    }
    Est ce que quelqu'un saurait pourquoi, je n'obtiens pas un bon résultat?

    Et une autre question pour la marge d'erreur à laisser, comment faire?

    Merci d'avance pour l'aide.

  5. #5
    Membre chevronné Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Par défaut
    Cette ligne là me pose problème ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if((ppp.y==verify) && (xmin<ppp.x) && (ppp.x<xmax) && (ymin<ppp.y) && (ppp.y<ymax)) {
    surtout le "ppp.y == verify "


    Pour la marge d'erreur, il faut qu'au lieu de dire mon point est sur la droite il est plus ou moins proche ( genre ppp.y <= verify+5 && ppp.y>=verify-5 )

    et sinon dans ton "a" tu divises par 20 juste pour le fun ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 16
    Par défaut
    j'ai modifié la ligne en mettant plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if( ppp.y <= verify+5 && ppp.y>=verify-5 ){
    		   if ((xmin<ppp.x) && (ppp.x<xmax) && (ymin<ppp.y) && (ppp.y<ymax)) 
    	   res = true;	   
       }
    et ça marche mais ça ne prend pas en compte la marge d'erreur, il faut que je clique sur la ligne sinon c'est pas bon

Discussions similaires

  1. Savoir si un point appartient à un champ
    Par lbrnoss dans le forum Mathématiques
    Réponses: 17
    Dernier message: 16/01/2012, 17h16
  2. Vérifier si un point appartient à un segment
    Par Invité dans le forum Interfaces Graphiques en Java
    Réponses: 5
    Dernier message: 11/04/2011, 09h35
  3. Réponses: 1
    Dernier message: 06/02/2010, 17h55
  4. [Débutant] un point appartient a un triangle en cordonnées 3D
    Par roubas dans le forum MATLAB
    Réponses: 4
    Dernier message: 14/03/2009, 11h41
  5. cherche si un point appartient à une droite dans l'image
    Par kaiseresis dans le forum Traitement d'images
    Réponses: 1
    Dernier message: 16/12/2008, 12h22

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