Ejemplo n.º 1
0
void World::randomize(uint32_t width, uint32_t height, uint32_t nbObstacles, uint32_t seed)
{
    if(seed == 0)
    {
        seed = static_cast<uint32_t>(std::time(0));
    }

    std::mt19937 rng(seed);

    std::uniform_int_distribution<uint32_t> heightDistribution(0, height);
    std::uniform_int_distribution<uint32_t> widthDistribution(0, width);
    std::uniform_int_distribution<uint32_t> angleDistribution(0, 359);
    std::normal_distribution<float32> sizeDistribution(10.0, 5.0);

    for(uint32_t i = 0; i < nbObstacles; ++i)
    {
        std::shared_ptr<StaticBox> box = std::make_shared<StaticBox>(
            b2Vec2(widthDistribution(rng), heightDistribution(rng)),
            angleDistribution(rng),
            std::abs(sizeDistribution(rng)),
            std::abs(sizeDistribution(rng))
        );
        addDrawable(box);
    }
}
Ejemplo n.º 2
0
std::vector<sv::Real3> generatePoints(size_t count) {
	std::vector<sv::Real3> points;

	std::random_device rd;
	std::mt19937 rng(rd());

	std::uniform_real_distribution<> heightDistribution(-1, 1);
	std::uniform_real_distribution<> angleDistribution(0, 2 * M_PI);

	for (size_t i = 0; i < count; i++) {
		double z = heightDistribution(rng);
		double phi = angleDistribution(rng);
		double theta = asin(z);
		double x = cos(theta) * cos(phi);
		double y = cos(theta) * sin(phi);

		points.push_back(sv::Real3(x, y, z));
	}

	return points;
}
Ejemplo n.º 3
0
Ped::Tvector ShoppingPlanner::createRandomOffset() const
{
    const double radiusStd = 4;
	std::normal_distribution<double> radiusDistribution ( 0, radiusStd );
	double radius = radiusDistribution ( RNG() );

	std::discrete_distribution<int> angleDistribution {0,45,90,135,180,225,270,315,360};
	double angle = angleDistribution ( RNG() );

    Ped::Tvector randomOffset = Ped::Tvector::fromPolar ( Ped::Tangle::fromDegree ( angle ), radius );

	// only update for significant shopping idea change
	if (randomOffset.lengthSquared() < 2.0)
		return Ped::Tvector(0, 0, 0);

    return randomOffset;
}
Ejemplo n.º 4
0
bool RealLidar2D::measure(const nanosecond& time, const Point2D& pose, Measure &valueSensed, Measure &valueIdeal) noexcept {

	if (time - timeLastMeasure_ < samplingTime_)
		return false;

	auto applyRes = [](double const &value, double const &resolution) -> double {
		if (resolution == .0) return value;
		return resolution*int(value/resolution);
	};

	auto rangeLimit = [&](double const &value) -> double {
		if (value < rangeMin_) return rangeMin_;
		if (rangeMax_ < value) return rangeMax_;
		return value;
	};

	auto angleLimit = [&](double const &value) -> double {
		return value<.0? 2.*pi+value : std::fmod(value,2.*pi) ;
	};

	double const rangeNoise{rangeDistribution(generator)};
	double const angleNoise{angleDistribution(generator)};

	valueIdeal.m[1] = angleLimit(ns2s(time)*scanSpeed_);


	if (scanAngle_ == .0 || valueIdeal.m[1] <= scanAngle_ || 2.*pi-scanAngle_ <= valueIdeal.m[1]) {
		Lidar2D const *lidar = this;
		valueIdeal.m[0] = lidar->measure(valueIdeal.m[1],pose);
		valueSensed.m[0] = applyRes(rangeLimit(valueIdeal.m[0] + rangeNoise),rangeResolution_);
		valueSensed.m[1] = applyRes(angleLimit(valueIdeal.m[1] + angleNoise),angleResolution_);
		return true;
	}

	valueIdeal.m[0] = .0;
	valueSensed.m[0] = applyRes(rangeLimit(rangeNoise),rangeResolution_);
	valueSensed.m[1] = applyRes(angleLimit(valueIdeal.m[1] + angleNoise),angleResolution_);
	return true;
}