if (! paths[i].empty()) { int cur_x = agvs[i].getCurrentX(); int cur_y = agvs[i].getCurrentY(); Node* next_node = paths[i][0]; float speed = agvs[i].getSpeed(); float distance = sqrt(pow(next_node->x - agvs[i].getCurrentX(), 2) + pow(next_node->y - agvs[i].getCurrentY(), 2)); float time = distance / speed * 1000; //_MAP[cur_x][cur_y] = 1; QTimer::singleShot(time, this, [&, i, next_node, cur_x, cur_y]() { // 离开当前位置时将标记设为0 //_MAP[cur_x][cur_y] = 0; agvs[i].setCurrentX(next_node->x); agvs[i].setCurrentY(next_node->y); this->update(); // 在窗口中重绘 }); },添加代碼,黨agv移動3個坐標的時候,電量減1
时间: 2024-01-18 13:03:08 浏览: 65
您可以在代码中增加以下内容来实现您的要求:
```c++
if (! paths[i].empty()) {
int cur_x = agvs[i].getCurrentX();
int cur_y = agvs[i].getCurrentY();
Node* next_node = paths[i][0];
float speed = agvs[i].getSpeed();
float distance = sqrt(pow(next_node->x - agvs[i].getCurrentX(), 2) + pow(next_node->y - agvs[i].getCurrentY(), 2));
float time = distance / speed * 1000;
// 计算电量的减少量
float power_consumption = distance / 3.0;
//_MAP[cur_x][cur_y] = 1;
QTimer::singleShot(time, this, [&, i, next_node, cur_x, cur_y, power_consumption]() {
// 离开当前位置时将标记设为0
//_MAP[cur_x][cur_y] = 0;
agvs[i].setCurrentX(next_node->x);
agvs[i].setCurrentY(next_node->y);
// 更新电量
agvs[i].setPower(agvs[i].getPower() - power_consumption);
this->update(); // 在窗口中重绘
});
}
```
这段代码会在 AGV 移动时,根据移动的距离计算电量的减少量,并将电量减去该值来更新 AGV 的电量。其中,电量的减少量通过计算 AGV 移动的距离并除以 3 来得到。
阅读全文