Math.random()

Résolu
nice_girle Messages postés 40 Date d'inscription   Statut Membre Dernière intervention   -  
 toto -
Bonjour,svp je suis entrain de developper une applet contenant un cerle dont le rayon change et qui se deplace, le probleme c est que le deplacement dx est aleatoire , donc j ai appliquer Math.random() comme suit :

int dx = (int)Math.random() *100;
int dy =(int)Math.random()*100;

mais je vois que le cerle ne se deplace pas dans toute l applet ,mais une fois j ai mis :

dx +=10 ;
dy+=10;

ca a marché ; svp aider moi a determiner le probleme avec cette methode Math.random ()

8 réponses

toto
 
Bonjour

int dx = (int)Math.random() *100;
Je ne sais pas en quoi tu programmes (java ?) mais à mon avis...
Math.random() te donne un nombre entre 0 inclus et 1 exclus
donc (int)Math.random() vaut TOUJOURS 0 et (int)Math.random()*100 aussi

Essaye plutôt (int)(Math.random()*100)
3
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
j'ai pas trop bien compris...
qu'est ce que tu veux dire par le cercle ne se deplace pas dans tout l'applet ?
0
nice_girle Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
je veux dire qu il ne couvre pas toute mon applet , je veux creer une animation dans mon applet , par un cerle qui se deplace aleatoirement, vous avez une solution??
0
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
non je comprends pas normalement un random sur les deplacement dx et dy devrait suffire
0
nice_girle Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
wi ca j ai essayé , mais ca n a pas marché , car pour gerer cette animation jai creer 2 cerle , et a l aide d un thread jé pu effectuer le deplacement ,mais avec la methode Math.random() le deplacement s est fait juste au niveau du cerle origine et l autre ,mais une fois j ai changé la valeur de dx et dy par d autre valeur la j ai pu visualiser le deplacement celon l incrementation.????
0
nice_girle Messages postés 40 Date d'inscription   Statut Membre Dernière intervention   > nice_girle Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
tjrs pas de reponse,vraiment c est urgent
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nice_girle Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
merci bien toto ,oui je developpe en java, en fait ca a marché , merci infiniment , en fait j ai une autre question , svp ,j ai delimité la taille de mon applet , par Xmax et Ymax ( absciss et ordonné ) et je veux qu une fois le cerle depasse le Xmax ou le Ymax , qu il commence a reculer en arriére tout en reduisant son rayon ,vous avez une idée svp??
0
toto
 
Pour rebondir sur les bords, il faut que tu prévoies des variables sensX et sensY qui prendront la valeur +1 ou -1. Disons +1 au départ. Pour les déplacements, tu fais X=x+senxX*dx ( si ça s'écrit comme ça en java). Quand tu atteinds le X max, tu fais sensX=-1 (et ce que tu veux au rayon) comme ça ton cercle repartira dans l'autre sens.
Attention à ta formule pour le calcul de dx, avec un peu de (mal)chance, ton cercle ne bougera pas. Utilise plutôt une formule qui ne peut pas tomber à 0, genre 50+(int)(Math.random() *50);
0
nice_girle Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
stp toto ,dslée mais vraiment j ai essayé de faire ce que vous m avez dis mais j ai pas comprie ;vous dites je declare une variable int sensX = +1 ; int sensY =-1 ;

puis int X=x+senX*dx ( x c est l abciss du cerle d origine cé ca ??) et int Y=y+senY*dy

avec dx = (int)Math.random()*50; dy = (int)Math.random()*50; ??? la suite j ai pas pu la comprendre ,si vous pouvez m expliquer svp , merci d avance
0
toto
 
Je ne peux pas te donner de programme en java, je ne le connais pas.
Tu cherches à faire rebondir un cercle sur le bord d'un rectangle. Tu as déjà créé des variables dx et dy qui, je suppose, représentent le déplacement du centre de ton cercle à chause étape du mouvement. Tout ce que j'ai essayé de te dire, c'est que quand tu détectes que tu arrives sur un bord, il faut que tu changes le signe de dx ou celui de dy, selon que tu heurtes n bord vertical ou horizontal.
Un des moyens, c'est de mémoriser le sens de déplacement dans une variable sensX qui va valeir 1 quand tu vas de droite à gauche et -1 quand tu vas de gauche à droite. Avec un dx positif, tu as juste à faire un mouvement de sensX * dx à chaque étape.
Quant au 50+(int)(Math.random() *50) , c'est juste pour éviter d'avoir un cercle qui ne bouge pas. Avec ta formule, tu pouvais avoir dx=0, et là, ton cercle ne se déplacerait que de haut en bas. Et avec beaucoup de malchance, il ne bougerait même pas du tout, si dy tombe aussi sur 0 !
0
nice_girle Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
merci bien pour votre effort toto , et dslée si je vous ai derangé , en fait j ai suivi votre demarche mais j avais toujours un probleme, le cerle transgresse les bornes et revient a l interieur , merci infiniment. j espere que j aurais une reponse car vraiment j en ai besoin
0
toto
 
Je ne sais pas quel test tu fais pour vérifier si le bord est atteint, mais il ne faut pas oublier que c'est le bord du cercle qui touche le premier, pas le centre du cercle !
0