85 lines
1.7 KiB
C++
85 lines
1.7 KiB
C++
#ifndef INDOOR_GW3_STRUCTS_H
|
|
#define INDOOR_GW3_STRUCTS_H
|
|
|
|
#include "../../../geo/Heading.h"
|
|
#include "../../../geo/Point3.h"
|
|
#include <vector>
|
|
#include "../../../math/Distributions.h"
|
|
#include "../../../grid/Grid.h"
|
|
|
|
namespace GW3 {
|
|
|
|
struct StepSizes {
|
|
|
|
float stepSizeFloor_m = NAN;
|
|
float stepSizeStair_m = NAN;
|
|
|
|
bool isValid() const {
|
|
return (stepSizeFloor_m==stepSizeFloor_m) && (stepSizeStair_m==stepSizeStair_m);
|
|
}
|
|
|
|
template <typename Node> float inMeter(const int steps, const Point3 start, const Grid<Node>& grid) const {
|
|
|
|
Assert::isTrue(isValid(), "invalid step-sizes given");
|
|
|
|
const GridPoint gp = grid.toGridPoint(start);
|
|
const Node& n = grid.getNodeFor(gp);
|
|
if (grid.isPlain(n)) {
|
|
return stepSizeFloor_m * steps;
|
|
} else {
|
|
return stepSizeStair_m * steps;
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
/** paremters for the walk */
|
|
struct WalkParams {
|
|
|
|
//Distribution::Normal<float> dDistFloor;
|
|
//Distribution::Normal<float> dDistStair;
|
|
|
|
Point3 start;
|
|
//float distance_m;
|
|
int numSteps;
|
|
Heading heading = Heading(0);
|
|
|
|
float lookFurther_m = 1.5;
|
|
|
|
StepSizes stepSizes;
|
|
|
|
template <typename Node> float getDistanceInMeter(const Grid<Node>& grid) const {
|
|
return stepSizes.inMeter(numSteps, start, grid);
|
|
}
|
|
|
|
};
|
|
|
|
/** result of the random walk */
|
|
struct WalkResult {
|
|
Point3 position;
|
|
Heading heading = Heading(0);
|
|
double probability = 1.0;
|
|
};
|
|
|
|
/** several nodes */
|
|
template <typename Node> struct Nodes : public std::vector<const Node*> {
|
|
|
|
};
|
|
|
|
/** one walk along several nodes */
|
|
template <typename Node> struct Walk : public std::vector<const Node*> {
|
|
|
|
};
|
|
|
|
/** several walks */
|
|
template <typename Node> struct Walks : public std::vector<Walk<Node>> {
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
#endif // INDOOR_GW3_STRUCTS_H
|