【问题标题】:Random indices in Point cloud点云中的随机索引
【发布时间】:2017-02-15 08:35:36
【问题描述】:

我正在尝试找到随机索引来选择点云中的一些点。 以下是代码。但是,即使在使用 srand() 之后,我也得到相同的数字三次。有人可以帮忙吗?

/* find three points randomly */ 
for (long i = 0; i < 3; ++i) 
{
   srand (time(NULL));
   cout <<"\nRandom index" << (rand() % points.size() + 1); 
}

【问题讨论】:

  • 仔细阅读srand()你会发现你的代码有什么问题。
  • 是的...$srand()$ 必须被调用一次......在循环之外......谢谢:)
  • 您应该注意 rand() 的一些注意事项。最重要的是,rand() 的范围通常非常有限,可以低至 [0, 32767],这意味着您只能从前 32767 个点中选择 3 个点,而点云往往比这大得多. C++11 中有更好的随机数生成器,请参阅:en.cppreference.com/w/cpp/numeric/random 另一个警告是,您不会阻止选择相同的数字两次,这可能是也可能不是问题。您可以像这样创建唯一索引:stackoverflow.com/a/9651058/913630
  • 感谢@Markus 提供隐藏的细节 :)

标签: c++11 point-clouds


【解决方案1】:

每次循环迭代一次,您将在同一时间播种随机生成器。

而是在一开始就播种一次:

/* find three points randomly */ 
srand(time(NULL));
for(int i = 0; i != 3; ++i) {
  cout <<"\nRandom index" << (rand() % points.size() + 1); 
}

您也不需要使用long 进行三步循环:)

【讨论】:

    猜你喜欢
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    相关资源
    最近更新 更多