66 lines
1.9 KiB
C++
66 lines
1.9 KiB
C++
/*
|
||
* © Copyright 2014 – Urheberrechtshinweis
|
||
* Alle Rechte vorbehalten / All Rights Reserved
|
||
*
|
||
* Programmcode ist urheberrechtlich geschuetzt.
|
||
* Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner.
|
||
* Keine Verwendung ohne explizite Genehmigung.
|
||
* (vgl. § 106 ff UrhG / § 97 UrhG)
|
||
*/
|
||
|
||
#ifndef WALKMODULE_H
|
||
#define WALKMODULE_H
|
||
|
||
#include "../../../Grid.h"
|
||
|
||
/** base-class for all WalkStates */
|
||
struct WalkState {
|
||
|
||
/** current position within the grid (-> in cm!) */
|
||
GridPoint position;
|
||
|
||
/** nested struct to prevent name clashes */
|
||
struct Distance {
|
||
|
||
/**
|
||
* for every walk, the walker is given a desired distance
|
||
* however, the walking distance depends on the grid size and can
|
||
* therefore never be reached exactly. therefor we track the
|
||
* error between desired and walked distance to ensure "in average"
|
||
* the walked distance is correct
|
||
*/
|
||
float error_m;
|
||
|
||
Distance() : error_m(0) {;}
|
||
|
||
} distance;
|
||
|
||
/** ctor */
|
||
explicit WalkState(const GridPoint& position) : position(position) {;}
|
||
|
||
};
|
||
|
||
|
||
/**
|
||
* base-class for all walk-modules that influence p(e)
|
||
*/
|
||
template <typename Node, typename WalkState> class WalkModule {
|
||
|
||
public:
|
||
|
||
/** update the given WalkState before starting the walk. e.g. based on sensor readings */
|
||
virtual void updateBefore(WalkState& state, const Node& startNode) = 0;
|
||
|
||
/** get the probability p(e) from curNode to potentialNode */
|
||
virtual double getProbability(const WalkState& state, const Node& startNode, const Node& curNode, const Node& potentialNode) const = 0;
|
||
|
||
/** one step (edge) is taken */
|
||
virtual void step(WalkState& state, const Node& curNode, const Node& nextNode) = 0;
|
||
|
||
/** update the walk state based on the given transition (if any update is necssary) */
|
||
virtual void updateAfter(WalkState& state, const Node& startNode, const Node& endNode) = 0;
|
||
|
||
};
|
||
|
||
#endif // WALKMODULE_H
|