我想确定两辆车相距较远。我在TraCIDemo11p类的handlepositionupdate方法中编写了代码,但是只有一半的代码可以正确运行。
Coord senderPosition = mobility->getCurrentPosition();
double direction1=mobility->getAngleRad();
std::map<std::string, cModule*> availableCars = mobility->getManager()-
>getManagedHosts();
std::map<std::string, cModule*>::iterator it;
for(it = availableCars.begin(); it != availableCars.end(); it++)
{
TraCIMobility* mobility2 = TraCIMobilityAccess().get(it->second);
double direction2=mobility2->getAngleRad();
Coord receiverPosition = mobility2->getCurrentPosition();
if(direction2!=direction1){
std::cout<<"they move in opposite direction"<<endl;
}
double distance1=senderPosition.distance(receiverPosition);
WaveShortMessage* wsm = new WaveShortMessage();
scheduleAt(simTime()+1,wsm);
cArray array("array1");
int index = array.add(wsm);
double distance2=senderPosition.distance(receiverPosition);
if(distance2>distance1){
std::cout<<"they are getting far away"<<endl;
array.remove(index);
array.addAt(index, bsm);
}
}
}
当我运行它时,它只是呈现出它们沿相反方向移动,而其余的则没有呈现。 因此,我希望我的代码确定哪些车辆正在远离。我的问题出在哪里? 非常感谢您的帮助。
答案 0 :(得分:0)
我知道我的错误在哪里。 我同时计算distance1和distance2。但是我应该在不同的时间计算它们。 为此,我考虑使用getpositionAt()方法而不是getcurrentposition()方法。
simtime_t T=simTime()+60;
senderposition1=mobility->getpositionAt(T);
receiverposition1=mobility2->getpositionAt(T);
double distance2=senderposition1.Distance(receiverposition1);