Повторно соединяйте узлы, основываясь на их евклидовом расстоянии в omnet ++ - PullRequest
0 голосов
/ 28 апреля 2019

Я создал случайную топологию в файле NED. В этой топологии каждый узел имеет одинаковое расстояние соединения радиан. Я хочу установить соединения для каждого узла, находящегося на расстоянии rc.

Это так далеко, как я получил:

network ranTop
{
    parameters:
        int n = 100;
        int rc = 5;
        volatile int posX = intuniform (0,100);
        volatile int posY = intuniform (0,100);

    submodules:
        node[n] : Node {
            parameters:
                @display("p=$posX,$posY");
        }

}

1 Ответ

2 голосов
/ 03 мая 2019

У вас должен быть (энергонезависимый!) Параметр posX, posY для каждого узла, а затем создать петлю для всех возможных соединений и соединить узлы только , еслирасстояние меньше range.Вы можете получить доступ к параметрам узла в цикле и в условии if:

simple MeshNode extends Node
{
    parameters:
        int posX = default(intuniform(0,100));
        int posY = default(intuniform(0,100));

        @display("i=misc/node_vs;p=$posX,$posY");
    gates:
        inout g[];
}


//
// A network of nodes randomly placed where nodes 
// closer than 'range' are connected.
//
network MeshNetwork
{
    parameters:
        int num @prompt("Number of nodes") = default(100);
        int range = 15;  // nodes closer than this should be connected

    submodules:
        node[num] : MeshNode;

    connections allowunconnected:
        for i=0..(num-2), for j=(i+1)..(num-1) {
            node[i].g++ <--> node[j].g++ if pow(node[i].posX-node[j].posX, 2)+pow(node[i].posY-node[j].posY, 2) < range*range;
        }
}
...