我假設你正在使用Boost 1.49。下面的方法適用於這種情況。
這是Boost有點複雜的地方。該對象是uniform_on_sphere
只是您繪製點所需的一個組件,它是分佈的一部分。您還需要創建一個boost::variate_generator
,沿着以下工作.cpp文件的行。
請注意,這有我自己的包括使用系統時間種子等,你應該能夠修改這個以適應你。
// Standards, w/ctime to seed based on system time.
#include <iostream>
#include <fstream>
#include <vector>
#include <ctime>
// Boost. Requires variate_generator to actually draw the values.
#include <boost/random/mersenne_twister.hpp>
#include <boost/random/uniform_on_sphere.hpp>
#include <boost/random/variate_generator.hpp>
int main(){
typedef boost::random::mt19937 gen_type;
// You can seed this your way as well, but this is my quick and dirty way.
gen_type rand_gen;
rand_gen.seed(static_cast<unsigned int>(std::time(0)));
// Create the distribution object.
boost::uniform_on_sphere<float> unif_sphere(3);
// This is what will actually supply drawn values.
boost::variate_generator<gen_type&, boost::uniform_on_sphere<float> > random_on_sphere(rand_gen, unif_sphere);
// Now you can draw a vector of drawn coordinates as such:
std::vector<float> random_sphere_point = random_on_sphere();
// Print out the drawn sphere triple's values.
for(int i = 0; i < random_sphere_point.size(); ++i) {
std::cout << random_sphere_point.at(i) << ' ';
}
std::cout << '\n';
return 0;
}
當我在控制檯中運行,我得到看似正確的東西:
[email protected]:~/Desktop/Programming/C++/RandOnSphere$ g++ -I /usr/include/boost_1_49/ -L /usr/include/boost_1_49/stage/lib randomOnSphere.cpp -o ros
[email protected]:~/Desktop/Programming/C++/RandOnSphere$ ./ros
0.876326 -0.0441729 0.479689
[email protected]:~/Desktop/Programming/C++/RandOnSphere$ ./ros
-0.039037 -0.17792 0.98327
[email protected]:~/Desktop/Programming/C++/RandOnSphere$ ./ros
-0.896734 0.419589 -0.14076
來源
2012-04-18 03:47:39
ely
代碼爲我工作正常(使用boost 1.48,當然沒有無限循環)。我認爲它是你的boost版本中的一個bug。 – 2012-04-18 04:00:46