# how to generate random point

Dear community,

I' have written this function to generate random value at each iteration in a for loop, however, it seems that it doesn't do the expected job

  Point initPt(int nx0, int ny0, int nx1, int ny1){
RNG rng;
Point pt;
double D = rng.uniform((double) nx0, (double) nx1);
pt.x = round(D);

D = rng.uniform((double) ny0, (double) ny1);
pt.y = round(D);

return pt;
}


I wrote this demo loop to see the results

    for (int i=0; i<n ; i++){
Point pt = initPt(nx0, ny0, nx1, ny1);
nest.at<int>(i,1) = pt.x;
nest.at<int>(i,2) = pt.y;
cout << pt <<endl;
}


I got, unfortunately, this

   [127, 110]
[127, 110]
[127, 110]
[127, 110]
[127, 110]
[127, 110]
[127, 110]
...


I am glad to any help

edit retag close merge delete

nest.at<int>(i,1) <-- first index starts at 0

( 2016-12-20 23:43:27 -0500 )edit

I have to change that, however it doesn't fix the mean problem

( 2016-12-21 01:11:55 -0500 )edit

Sort by ยป oldest newest most voted

The RNG initializes to the same value every time you create it, so the output values are the same. I suggest seeding it with the current PC time (ex from getCPUTickCount().

more

how it's done ? with getCPUTickCount(). i've that same thing with srand(time(NULL)); rand() % nx1 + nx0;

( 2016-12-21 07:37:50 -0500 )edit
2

.

RNG rng(getCPUTickCount());

( 2016-12-21 08:47:49 -0500 )edit

that's Great, you deserve a save life Badge thank you @Tetragramm

( 2016-12-21 09:02:57 -0500 )edit

@azdoud.y it won't work with time(NULL), because that counts in seconds, and your code is way too fast, to get a different number then.

( 2016-12-23 01:24:45 -0500 )edit

As you said it want too slow @berak, i'll get first solution thank you I'm glad to be a member here with kind person

( 2016-12-23 01:31:58 -0500 )edit