さて、私はいくつかのコードを実行することができました。Gnome は gpointers を使用し、私のデータは構造体に格納されるため、問題は基本的に必要なキャストでした。だから私のコードは次のとおりです。
gboolean iter(GNode* n, gpointer data) {
node s=*(node *)(n->data);
int ID=g_node_depth(n);
if (G_NODE_IS_ROOT(n)==true)
{
std::cout<<"Node "<<ID<<" is a Root"<<std::endl;
}
else if (G_NODE_IS_LEAF(n)==true)
{
std::cout<<"Node "<<ID<<" is a Leaf"<<std::endl;
}
std::cout<<"Speed of Node "<<ID<<" is: "<<s.v<<std::endl;
return FALSE;
}
int main(){
node prueba,prueba1;
prueba.phi=0;
prueba.v=1;
prueba.x=50;
prueba.y=100; //Position in y
prueba1.phi=90;
prueba1.v=6;
prueba1.x=30;
prueba1.y=90;
GNode * root = g_node_new((gpointer) &prueba);
g_node_append(root, g_node_new((gpointer) &prueba1));
g_node_traverse(root, G_PRE_ORDER, G_TRAVERSE_ALL, -1, iter, NULL);
return 0;
}
私の構造体はどこにありますか:
struct state {
double x; //Position in x of a car
double y; //Position in y "
double phi; //Yaw angle of a car
double v; //Speed of a car
};
struct node {
double x;
double y;
double phi;
double v;
std::vector <state > trajectory;
};
アイデアは、以前の「軌跡」全体を各ノードに保存することです。そのため、ランダムなノード/リーフを選択した場合、軌跡を再構築する必要はなく、それを取るだけです。
このコードは現在動作します。それは改善される可能性があり、私はどんなコメントも受け付けています。
誰かに役立つことを願っています。