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

Algorithmes et structures de données Discussion :

[Geométrie]Disposer des noeuds sur un cercle trigonométrique


Sujet :

Algorithmes et structures de données

  1. #1
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut [Geométrie]Disposer des noeuds sur un cercle trigonométrique
    Bonjour

    Je développe un outil de visualisation de réseau en Java. Chacun de mes éléments est un noeud symbolisé par un cercle d'u nrayon donné, disons r. Ce que je veux, c'est disposer mes noeuds de manière à ce qu'il forment un cercle. Pour ce faire, j'ai écrit la méthode suivante :
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    private static void makeCircle(PNode nodes[], LinkedList ll){
     
    		double y0;
     
    		double x;
     
    		double y;
     
    		double x0 = y0 = x = y = 0.0D;
     
    		double rayon = 500D;
     
    		int nbProt = 0;
     
    		Vector vector = new Vector();
     
     
     
    		Iterator i = ll.iterator();
     
     
     
    		while(i.hasNext())
     
    		{
     
    			Protein P = (Protein)i.next();
     
    			String s = P.id;
     
    			vector.add(s);
     
    			nbProt++;
     
    		}
     
     
     
    		for(int j = 0; j < nbProt; j++)
     
    		{
     
    			String s = (String)vector.get(j);
     
    			double angle = ((double)(j * 2) * 3.1415926535897931D) / (double)nbProt;
     
    			x = x0 + rayon * Math.cos(angle);
     
    			y = y0 + rayon * Math.sin(angle);
     
    			for(int k = 0; k < nodes.length; k++)
     
    				if(s.compareTo(proteinText[k].getText()) == 0)
     
    				{
     
    					nodes[k].animateToPositionScaleRotation(x, y, 1.0D, 0.0D, 1000L);
     
    				}
     
    		}
     
     
     
    		pcam.animateViewToCenterBounds(layer.getGlobalFullBounds(), true, 1000L);
     
    	}
    Ceci est satisfaisant pour un petit nombre d'éléments. Mais cela devient difficile de distinguer chaque élément dès lors que j'ai un grand nombre de noeuds.
    Comment faire alors pour varier le rayon de mon cercle trigonométrique en fonction de mon nombre de noeuds ?

    Merci d'avance de vos réponses.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Tu crées ton cercle avec un rayon variant linéairement selon le nombre de noeud. Ainsi, la distance entre 2 noeuds sera constante.

  3. #3
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    En gros, il faudrait que je calcule le nombre maximal de noeuds pour ce rayon donné où je n'ai pas de chevauchement. Si mon nombre de noeud est supérieur à cette valeur maximale, alors, je recalcule un rayon plus grand ?
    C'est ça si j'ai bien suivi ?
    Merci en tout cas de ta proposition.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  4. #4
    Sib
    Sib est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Points : 30
    Points
    30
    Par défaut
    (aïe, des maths)

    Pour un nombre de noeuds du réseau N > 3, tu peux prendre comme rayon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    R = 4*r / sin(2*pi / N)
    Avec ce rayon, les cercles représentant les noeuds de ton réseau ne se superposeront jamais ..

  5. #5
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Merci Sib Ta solution me satisfait complètement.
    A charge de revanche.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

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

Discussions similaires

  1. Placer des boutons sur un cercle
    Par toufou dans le forum Composants graphiques
    Réponses: 0
    Dernier message: 14/11/2013, 19h01
  2. Disposer des controles sur des lignes
    Par krunch dans le forum jQuery
    Réponses: 5
    Dernier message: 17/03/2013, 23h04
  3. Réponses: 1
    Dernier message: 08/03/2007, 10h55
  4. [XSD] Problème d'order sur des noeuds dans un schema
    Par jesus144 dans le forum Valider
    Réponses: 2
    Dernier message: 13/04/2006, 15h59

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