У вас должен быть (энергонезависимый!) Параметр 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;
}
}