我试图在NS-3中建模一些节点在矩形内以恒定的垂直速度移动。
问题:我必须添加以下功能:当节点超出y = 2500时,其x位置突然变为x位+ 257.这就是我尝试过的远:
a=16
这最后一个for循环根本不起作用!我该如何在当前脚本中实现该功能?
PS:由于我是NS-3的新手,我不想冒险修改任何NS-3源文件。
答案 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));
}