NS-3:如何在模拟过程中改变节点位置?

时间:2015-11-27 03:35:23

标签: ns-3

我试图在NS-3中建模一些节点在矩形内以恒定的垂直速度移动。

问题:我必须添加以下功能:当节点超出y = 2500时,其x位置突然变为x位+ 257.这就是我尝试过的远:

a=16

这最后一个for循环根本不起作用!我该如何在当前脚本中实现该功能?

PS:由于我是NS-3的新手,我不想冒险修改任何NS-3源文件。

1 个答案:

答案 0 :(得分:0)

您需要做的是将第二个循环的内容移动到“预定”状态。方法(例如CheckBound)。

void CheckBound(Ptr< ConstantVelocityMobilityModel > mob ){
    Vector m_position = mob->GetPosition();
    Vector m_velocity = mob->GetVelocity();
    if (m_position.y > 2500) 
        {
           m_position.x += 257;
           m_velocity.y *= -1;
           mob->SetVelocity(m_velocity);
           mob->SetPosition(m_position);
        }
}

然后在您的主要内容中,您需要估计何时需要调用它。做简单的数学计算,我们估计Dy是你的2500限制的距离和它需要的时间Dt = Dy /速度。 e.g。

for (uint n=0 ; n < satellites.GetN() ; n++)
 {
    Ptr<ConstantVelocityMobilityModel> cvMob = satellites.Get(n)->GetObject<ConstantVelocityMobilityModel>();
    Vector m_position = cvMob->GetPosition();
    Vector m_speed = cvMob->GetVelocity();
    double Dy = 2500 - m_position.y;
    double Dt = Dy/m_speed.y; 
    Simulator::Schedule(Seconds(Dt), MakeCallback(&CheckBound, cvMob));
 }