53 lines
1.2 KiB
C++
53 lines
1.2 KiB
C++
#ifndef DIJKSTRAMAPPER_H
|
|
#define DIJKSTRAMAPPER_H
|
|
|
|
#include "MyGridNode.h"
|
|
|
|
/**
|
|
* allows BETTER dijkstra calculation on top of our data-structure
|
|
*/
|
|
class DijkstraMapper {
|
|
|
|
Grid<MyGridNode>& grid;
|
|
|
|
public:
|
|
|
|
DijkstraMapper(Grid<MyGridNode>& grid) : grid(grid) {;}
|
|
|
|
int getNumNeighbors(const MyGridNode& node) const {return node.getNumNeighbors();}
|
|
|
|
const MyGridNode* getNeighbor(const MyGridNode& node, const int idx) const {return &grid.getNeighbor(node, idx);}
|
|
|
|
float getWeightBetween(const MyGridNode& n1, const MyGridNode& n2) const {
|
|
float d = ((Point3)n1 - (Point3)n2).length(2) ;
|
|
//if (d > 20) {d*= 1.30;}
|
|
//d /= std::pow(n2.imp, 3);
|
|
d /= n2.imp;
|
|
return d;
|
|
}
|
|
|
|
};
|
|
|
|
/**
|
|
* allows NORMAL dijkstra calculation on top of our data-structure
|
|
*/
|
|
class DijkstraMapperNormal {
|
|
|
|
Grid<MyGridNode>& grid;
|
|
|
|
public:
|
|
|
|
DijkstraMapperNormal(Grid<MyGridNode>& grid) : grid(grid) {;}
|
|
|
|
int getNumNeighbors(const MyGridNode& node) const {return node.getNumNeighbors();}
|
|
|
|
const MyGridNode* getNeighbor(const MyGridNode& node, const int idx) const {return &grid.getNeighbor(node, idx);}
|
|
|
|
float getWeightBetween(const MyGridNode& n1, const MyGridNode& n2) const {
|
|
return ((Point3)n1 - (Point3)n2).length();
|
|
}
|
|
|
|
};
|
|
|
|
#endif // DIJKSTRAMAPPER_H
|