Проблема разметки, направленная на ускорение - PullRequest
1 голос
/ 18 июля 2011

Я новичок в буст-библиотеке, я пытался применить принудительно направленный макет с веб-сайта документации буста, но я столкнулся с такой ошибкой, когда пытаюсь скомпилировать код:

ошибка: не соответствуетфункция для вызова ‘random_graph_layout(MyGraph&, CoordSqMap&, double, double, double, double, boost::minstd_rand&)’

ошибка: не соответствует функция для вызова ‘fruchterman_reingold_force_directed_layout(MyGraph&, CoordSqMap&, double&, double&, boost::bgl_named_params<progress_cooling, boost::cooling_t, boost::no_property>)’

Я прикрепил свой код.

#include <boost/graph/fruchterman_reingold.hpp>
#include <boost/graph/random_layout.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/simple_point.hpp>
#include <boost/lexical_cast.hpp>
#include <string>
#include <iostream>
#include <map>
#include <vector>
#include <boost/random/linear_congruential.hpp>
#include <boost/progress.hpp>
#include <boost/shared_ptr.hpp>

#include <boost/graph/small_world_generator.hpp>
#include <boost/random/linear_congruential.hpp>

using namespace boost;

struct decomposition_index_t{
  typedef vertex_property_tag kind;
};
struct coordinates_sq_t{
  typedef vertex_property_tag kind;
};
struct coordinates_circle_t{
  typedef vertex_property_tag kind;
};

template<typename T>
struct Polar {
  T rad;
  T angle;
};

struct VParams {
  int a;
  double b;
  long c;
  // std::complex<double> d;
};

typedef adjacency_list<vecS, vecS, undirectedS,
                       property<vertex_name_t, std::string,
                       property<decomposition_index_t, int,
                       property<coordinates_sq_t, simple_point<double>,
                       property<coordinates_circle_t, Polar<double>,
                       VParams > > > > > MyGraph;

typedef property_map<MyGraph,coordinates_sq_t>::type CoordSqMap;
typedef property_map<MyGraph,coordinates_circle_t>::type CoordCMap;

typedef graph_traits<MyGraph>::vertex_descriptor Vertex;

class progress_cooling : public linear_cooling<double>
{
  typedef linear_cooling<double> inherited;

 public:
  explicit progress_cooling(std::size_t iterations) : inherited(iterations)
  {
    display.reset(new progress_display(iterations + 1, std::cerr));
  }

  double operator()()
  {
    ++(*display);
    return inherited::operator()();
  }

 private:
  shared_ptr<boost::progress_display> display;
};

typedef boost::small_world_iterator<boost::minstd_rand, MyGraph> SWGen;

int main()
{
  boost::minstd_rand gen;
  // Create graph with 10000 nodes
  int nodecount = 90000;
  MyGraph g(SWGen(gen, nodecount, 6, 0.03), SWGen(), nodecount);

  double width = 2;
  double height = 2;

  CoordSqMap position = get(coordinates_sq_t(), g);
  random_graph_layout(g, position, -width/2, width/2, -height/2, height/2, gen);

  int iterations = 20;
  fruchterman_reingold_force_directed_layout
    (g, position, width, height,
     cooling(progress_cooling(iterations)) /* .force_pairs(all_force_pairs()) */  );

  return 0;
}

Я пыталсявсе мои лучшие возможные способы решить это до сих пор не в состоянии это сделать.Есть ли у вас какие-либо предложения для этого.У вас есть работающий пример кода для компоновки Kamada Kawai Spring.

1 Ответ

1 голос
/ 13 октября 2011

Если вы используете относительно новую версию, но не последнюю версию, в некоторых версиях была ошибка, из-за которой были обновлены интерфейсы к функциям, но не было документации.Правильная документация: http://www.boost.org/doc/libs/1_47_0/libs/graph/doc/fruchterman_reingold.html (и другие текущие страницы документации BGL).

...