Program Listing for File DynamicHyperbolicGenerator.hpp

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_