【发布时间】:2017-12-08 22:05:03
【问题描述】:
我目前正在处理一些代码,并且我目前有一个道路类,带有一个指向车道的指针向量(一个私有成员),并且这个道路类包括一个车道类。这个车道类包含一个指向车辆的指针向量,这是另一个类,它包含简单的 get 和 set 函数来更新和获取车辆的位置、速度等。现在,我让车辆在不同的车道上行驶,我允许他们切换车道,因为在交通流中也是如此。但是,我希望我的车辆不断地找到与它和前面车辆的距离,即查看车辆向量并找到最近的车辆。然后我打算用它来指示汽车是否应该减速。我还想确保领先其余的汽车,因为一旦车辆离开显示窗口高度,它们应该被删除。
我的尝试如下:
void Lane::Simulate(double time)
{ // This simulate allows check between other vehicles.
double forwardDistance = 0;
for (unsigned int iV = 0; iV < fVehicles.size(); iV++)
{
for(unsigned int jV = 0; jV < fVehicles.size(); jV++)
{
forwardDistance = fVehicles[iV]->getPosition() - fVehicles[jV]->getPosition();
}
}
if(fVehicles.size() < 15)
{
addRanVehicle(); // Adds a vehicle, with position zero but random velocities, to each lane.
}
for (unsigned int iVehicle = 0; iVehicle < fVehicles.size(); iVehicle++)
{
fVehicles[iVehicle]->Simulate(time); // Updates position based on time, velocity and acceleration.
}
}
可能有比使用forwardDistance 参数更好的方法。思路是遍历每一对车辆,避开点iV == jV,找到第iV辆车前面的车辆,将两辆车之间的距离记录到一个setDistance()函数中(这是一个函数我的车辆类)。然后我应该可以用它来检查汽车是否离得太近,检查它是否可以超车,或者它是否只需要刹车。
目前,我不确定如何为此制定有效的循环机制。
【问题讨论】:
-
计算后您似乎没有使用
forwardDistance。 -
我知道我没用过。我不确定如何创建一个有效的循环来找到车道中两辆车之间的最小距离,即车辆与前方车辆之间的距离。很抱歉,不清楚
-
所以你正在检查车道上当前车辆与同一车道上所有其他车辆之间的距离?大概 fVehicles 是一个向量?您想计算车道上任意两辆车之间的最小距离吗?
-
车辆可以在车道内改变位置吗?如果不是,那么您只需要一个计算
forwardDistance = fVehicles[n]->getPosition() - fVehicles[n-1]->getPosition();的循环 -
std::deque可能是更好的数据结构来存储车道中的车辆。一段受监控的道路将在一侧添加汽车并从另一侧移除您在一侧添加并从另一侧移除,双端队列的行为大大超过了vector。