2011-07-18 5 views
1

私はブーストライブラリ内の初心者ですが、私はブーストのドキュメントのWebサイトから力向かうレイアウトを適用しようとしましたが、私は私のコードをコンパイルしようとすると、私はこのようなエラーが発生しました:ブースト力レイアウトの問題

error: no matching function for call to ‘random_graph_layout(MyGraph&, CoordSqMap&, double, double, double, double, boost::minstd_rand&)’

error: no matching function for call to ‘fruchterman_reingold_force_directed_layout(MyGraph&, CoordSqMap&, double&, double&, boost::bgl_named_params<progress_cooling, boost::cooling_t, boost::no_property>)’

I私のコードを添付しました。

#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

最新のリリースではなく比較的新しいバージョンを使用している場合、機能へのインターフェイスが更新されていてもドキュメントが存在しないバージョンのバグがありました。正しいドキュメントはhttp://www.boost.org/doc/libs/1_47_0/libs/graph/doc/fruchterman_reingold.htmlです(その他の現在のBGLドキュメントページ)。