float outradsq = _rOuter*_rOuter;
int dist;
//这四个是为了防止采集的框超出图像范围的,对采集的box的x和y坐标做限制
int minrow = max(0,(int)_objectBox.y-(int)_rInner);
int maxrow = min((int)rowsz-1,(int)_objectBox.y+(int)_rInner);
int mincol = max(0,(int)_objectBox.x-(int)_rInner);
int maxcol = min((int)colsz-1,(int)_objectBox.x+(int)_rInner);
int i = 0;
//分母相当于x能采集的范围乘以y能采集的范围,也就是可以采集的最大box个数,
//那么_maxSampleNum(我们需要采集的box的最大个数)肯定得小于或者等于它。
//那这个prob是干嘛的呢?到下面用到它的地方说
float prob = ((float)(_maxSampleNum))/(maxrow-minrow+1)/(maxcol-mincol+1);
int r;
int c;
_sampleBox.clear();//important
Rect rec(0,0,0,0);
for( r=minrow; r<=(int)maxrow; r++ )
for( c=mincol; c<=(int)maxcol; c++ ){
//计算生成的box到目标box的距离
dist = (_objectBox.y-r)*(_objectBox.y-r) + (_objectBox.x-c)*(_objectBox.x-c);
//后两个条件是保证距离需要在_rInner和_rOuter的范围内
//那么rng.uniform(0.,1.) < prob 这个是干嘛的呢?
//连着上面看,如果_maxSampleNum大于那个最大个数,prob就大于1,这样,
//rng.uniform(0.,1.) < prob这个条件就总能满足,表示在这个范围产生的
//所以box我都要了(因为我本身想要更多的,但是你给不了我那么多,那么你能给的,我肯定全要了)。
//那如果你给的太多了,我不要那么多,也就是prob<1,那我就随机地跳几个走好了