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

Windows Forms Discussion :

Créer des positions aléatoires [Débutant]


Sujet :

Windows Forms

  1. #1
    Invité
    Invité(e)
    Par défaut Créer des positions aléatoires
    Bonjour,

    J'ai actuellement un projet à effectuer, où je dois simuler aléatoirement des déplacements (crédibles) qui seront affichées sur une carte.

    Les problèmes sont les suivants :

    -Je n'arrive pas à créer des positions "vraiment" aléatoires : ce sont toujours les mêmes quand je relance le processus.
    -Je n'arrive pas à créer des trajectoires entre 2 points de départ et d'arrivée.

    Si quelqu'un pouvait m'aider, je lui en serait vraiment reconnaissant.

    J'aurais aussi d'autres questions, mais je vais déjà essayer de résoudre ce premier problème...

    Merci d'avance.

    Zaer
    Dernière modification par Invité ; 16/05/2012 à 09h39.

  2. #2
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 141
    Points : 201
    Points
    201
    Par défaut
    Tu peux t'amuser à créer une IA qui calculerait le déplacement n+1 en fonction du déplacement n.

    Ou simplement jouer avec du "random" (ce qui empêchera d'avoir le même déplacement à chaque lancement de l'appli).

  3. #3
    Invité
    Invité(e)
    Par défaut
    Tu peux t'amuser à créer une IA qui calculerait le déplacement n+1 en fonction du déplacement n.
    C'est déjà ce que j'ai fait (enfin je crois, c'est un peu le fouilli dans mon code) mais je n'ai pas l'impression que ça fonctionne.

    Ou simplement jouer avec du "random" (ce qui empêchera d'avoir le même déplacement à chaque lancement de l'appli).
    J'utilise également des random mais ça me donne toujours les mêmes valeurs au lancement.

    Voilà mes fonctions :

    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
    public float CreerLatitudeDepart()
            {
                float LatitudeDepart;
                Random RandLatDepart = new Random(DateTime.Now.Millisecond);
                LatitudeDepart = RandLatDepart.Next(43551389, 49712778);
                LatitudeDepart = LatitudeDepart / 1000000;
     
                return LatitudeDepart;
            }
     
            public float CreerLongitudeDepart()
            {
                float LongitudeDepart;
                Random RandLongDepart = new Random(DateTime.Now.Millisecond);
                LongitudeDepart = RandLongDepart.Next(-1930000, 7012778);
                LongitudeDepart = LongitudeDepart / 1000000;
     
                return LongitudeDepart;
            }
     
            public float CreerLatitudeArrivee()
            {
                float LatitudeArrivee;
                Random RandLatArrivee = new Random(DateTime.Now.Millisecond);
                LatitudeArrivee = RandLatArrivee.Next(43551389, 49712778);
                LatitudeArrivee = LatitudeArrivee / 1000000;
     
                return LatitudeArrivee;
            }
     
            public float CreerLongitudeArrivee()
            {
                float LongitudeArrivee;
                Random RandLongArrivee = new Random(DateTime.Now.Millisecond);
                LongitudeArrivee = RandLongArrivee.Next(-1930000, 7012778);
                LongitudeArrivee = LongitudeArrivee / 1000000;
     
                return LongitudeArrivee;
            }
     
            public float CreerLatitude(float CreerLatitudeDepart, float CreerLatitudeArrivee)
            {
                float Latitude;
                Random RandLatitude = new Random(DateTime.Now.Millisecond);
                Latitude = RandLatitude.Next(((int)CreerLatitudeDepart), ((int)CreerLatitudeArrivee));
     
                return Latitude;
            }
     
            public float CreerLongitude(float CreerLongitudeDepart, float CreerLongitudeArrivee)
            {
                float Longitude;
                Random RandLongitude = new Random(DateTime.Now.Millisecond);
                if (CreerLongitudeDepart > CreerLongitudeArrivee)
                {
                    Longitude = RandLongitude.Next((int)CreerLongitudeArrivee, ((int)CreerLongitudeDepart));
                }
                else
                {
                    Longitude = RandLongitude.Next((int)CreerLongitudeDepart, ((int)CreerLongitudeArrivee));
                }
     
                return Longitude;
            }
    Merci pour ta réponse

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 180
    Points : 4 496
    Points
    4 496
    Par défaut
    ou au pire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new Random((int) DateTime.Now.Ticks)
    et tu auras plus de chance d'avoir des nombres aléatoires

  5. #5
    Invité
    Invité(e)
    Par défaut
    Merci pour ta réponse.

    Malheureusement, ça me donne toujours le même résultat.

    Voilà les positions que ça me donne (et ce sont toujours les mêmes)

    http://www.developpez.net/forums/att...1&d=1337156631

    Je ne sais vraiment pas comment faire, je désespère :/
    Images attachées Images attachées  

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 180
    Points : 4 496
    Points
    4 496
    Par défaut
    perso quand j'effectue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      float LatitudeDepart;
                Random RandLatDepart = new Random();
                LatitudeDepart = RandLatDepart.Next(43551389, 49712778);
                LatitudeDepart = LatitudeDepart / 1000000;
    J'obtiens a chaque fois des coordonnées différentes

    mets un break point pour voir si ton problème est bien le random ou autre part

  7. #7
    Invité
    Invité(e)
    Par défaut
    Voilà les positions qui sont crées aléatoirement, en gros :

    Latitude :
    1-395,910111502455
    2-326,607556510391
    3-188,002446526262
    4-326,607556510391
    5-465,212666494519
    6-188,002446526262
    7-118,699891534198
    8-257,305001518326
    9-395,910111502455
    10-465,212666494519
    11-188,002446526262


    Longitude :
    1-93,2327739769454
    2-93,2327739769454
    3-238,154184303804
    4-141,539910752565
    5-465,212666494519
    6-238,154184303804
    7-334,768457855042
    8-141,539910752565
    9-93,2327739769454
    10-44,925637201326
    11-286,461321079423
    Mais je dois avoir un problème avec la création des positions de départ/arrivée, car à chaque fois que je lance la boucle de création des positions, les positions de départ/arrivée changent alors que ça ne devrait pas, donc il va falloir que je trouve un moyen pour qu'elles soient créées une seule fois et qu'elles ne changent pas avant la fermeture de l'appli.

    Merci pour ton aide.

    Edit : Enfin, ce ne sont pas vraiment les positions, ce sont les valeurs pour les afficher sur la carte.
    Dernière modification par Invité ; 16/05/2012 à 11h50.

  8. #8
    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 493
    Points
    5 493
    Par défaut
    Bonjour.

    L'objet random doit être initialisé une fois pour toutes et ensuite on doit simplement appeler Next. Réinitialiser à chaque fois un objet random ne retourne pas des valeurs aléatoires. Pire, puisque DateTime.Now n'a qu'une résolution de 15ms on génère des valeurs identiques lors d'appels consécutifs, Now n'ayant pas encore changé.

  9. #9
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    Bonjour,

    Tout à fait d'accord avec DonQuiche, il faut que tu mettes ton Random en champ privé de ta classe (ou propriété private en readonly), tu l'initialises une fois dans le constructeur.

    Si tu veux un déplacement, il ne faut pas utiliser random( (Latitude/Longitude)départ,(Latitude/Longitude)Arrivée), tu auras un positionnement aléatoire entre ton point de départ et ton point d'arrivée.

    Il faut que tu ajoutes une quantité aléatoire en fonction de la vitesse de ta progession (de l'ordre de 0,00000001 pour un déplacement lent et 0,1 pour un déplacement rapide par exemple) jusqu'à avoir obtenu ta latitude/longitude d'arrivée. Il faut aussi que tu stockes la position actuelle. Sans VS, ça doit donner un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Random r = new Random(Environment.TickCount);
    private float NextPositionLatitude()
    {
        float nextLatitude = CurrentLatitude + (r.Next(1, 100)/100000);
        if (nextLatitude >= LatitudeArrivee)
            return LatitudeArrivee;
        return nextLatitude;
    }
    Bon dév.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Salut à tous et merci de vos réponses

    Désolé de ne donner de mes nouvelles que maintenant :/

    Effectivement, à chaque fois j'initialisais le random dans la boucle, alors qu'il ne fallait pas

    Du coup, j'ai viré la position d'arrivée, et j'ai seulement fait un Latitude = Latitude + DeltaLatitude (DeltaLatitude étant un random)
    Idem pour la longitude.

    Désolé sisqo60 de t'être embêté à me répondre pour rien

    Merci pour votre aide

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

Discussions similaires

  1. créer des ractangles aléatoires
    Par bellabouh dans le forum Tkinter
    Réponses: 18
    Dernier message: 15/06/2014, 10h57
  2. créer des formes aléatoires
    Par tawfiknejeh dans le forum MATLAB
    Réponses: 8
    Dernier message: 30/01/2013, 08h31
  3. Movie clip prend aléatoirement des positions bien définies
    Par compton dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 23/03/2012, 04h33
  4. Réponses: 12
    Dernier message: 25/05/2007, 16h28
  5. [CR] Est il possible de créer des univers avec Seagate Info?
    Par Frank dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 27/06/2002, 15h22

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