↰ Return to documentation for file (include/networkit/generators/DynamicHyperbolicGenerator.hpp
)
/*
* DynamicHyperbolicGenerator.hpp
*
* Created on: 29.07.2014
* Author: moritzl
*/
#ifndef NETWORKIT_GENERATORS_DYNAMIC_HYPERBOLIC_GENERATOR_HPP_
#define NETWORKIT_GENERATORS_DYNAMIC_HYPERBOLIC_GENERATOR_HPP_
#include <map>
#include <networkit/generators/DynamicGraphGenerator.hpp>
#include <networkit/generators/quadtree/Quadtree.hpp>
namespace NetworKit {
class DynamicHyperbolicGenerator final : public DynamicGraphGenerator {
friend class GeneratorsGTest;
public:
DynamicHyperbolicGenerator(count n = 1000, double avgDegree = 6, double exp = 3, double T = 0,
double moveEachStep = 0, double moveDistance = 0);
DynamicHyperbolicGenerator(std::vector<double> &angles, std::vector<double> &radii, double R,
double alpha, double T = 0, double moveEachStep = 0,
double moveDistance = 0);
DynamicHyperbolicGenerator();
std::vector<GraphEvent> generate(count nSteps) override;
Graph getGraph() const;
std::vector<Point2D> getCoordinates() const;
private:
void initializePoints();
void initializeQuadTree();
void initializeMovement();
void recomputeBands();
vector<index> getNeighborsInBands(index i, bool bothDirections = true);
void getEventsFromNodeMovement(vector<GraphEvent> &result);
void moveNode(index node);
// general geometry parameters
count nodeCount;
double alpha;
double R;
double T;
// movement parameters
double moveEachStep;
double moveDistance;
// coordinates
vector<double> angles;
vector<double> radii;
// movement vectors
vector<double> angularMovement;
vector<double> radialMovement;
// data structures
Quadtree<index, false> quad;
vector<double> bandRadii;
vector<vector<Point2DWithIndex<double>>> bands;
vector<vector<double>> bandAngles;
bool initialized;
};
} /* namespace NetworKit */
#endif // NETWORKIT_GENERATORS_DYNAMIC_HYPERBOLIC_GENERATOR_HPP_