Math.random()

Résolu/Fermé
nice_girle Messages postés 40 Date d'inscription jeudi 24 juillet 2008 Statut Membre Dernière intervention 25 février 2010 - 22 nov. 2008 à 13:52
 toto - 22 nov. 2008 à 21:35
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

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 jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
22 nov. 2008 à 14:32
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 jeudi 24 juillet 2008 Statut Membre Dernière intervention 25 février 2010
22 nov. 2008 à 14:34
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 jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
22 nov. 2008 à 14:41
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 jeudi 24 juillet 2008 Statut Membre Dernière intervention 25 février 2010
22 nov. 2008 à 14:47
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 jeudi 24 juillet 2008 Statut Membre Dernière intervention 25 février 2010 > nice_girle Messages postés 40 Date d'inscription jeudi 24 juillet 2008 Statut Membre Dernière intervention 25 février 2010
22 nov. 2008 à 15:12
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 jeudi 24 juillet 2008 Statut Membre Dernière intervention 25 février 2010
22 nov. 2008 à 15:43
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
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 jeudi 24 juillet 2008 Statut Membre Dernière intervention 25 février 2010
22 nov. 2008 à 17:39
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
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 jeudi 24 juillet 2008 Statut Membre Dernière intervention 25 février 2010
22 nov. 2008 à 20:50
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
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