//畫出路綫 if (i < paths.size() && paths[i].size() > 1 && paths[i][0] != nullptr) { QPainterPath path; path.moveTo(paths[i][0]->x, paths[i][0]->y); for (int k = 1; k < paths[i].size(); k++) { if (paths[i][k] != nullptr) { path.lineTo(paths[i][k]->x, paths[i][k]->y); } } if (!path.isEmpty()) { QPainter painter(this); if (painter.isActive()) { painter.setPen(QPen(Qt::red, 2)); painter.drawPath(path); } } },修改代碼:循環所有的agv,畫出path的路徑
时间: 2023-12-21 19:03:18 浏览: 34
可以尝试以下修改代码:
```
for (int i = 0; i < agvs.size(); i++) {
//畫出路綫
if (i < paths.size() && paths[i].size() > 1 && paths[i][0] != nullptr) {
QPainterPath path;
path.moveTo(paths[i][0]->x, paths[i][0]->y);
for (int k = 1; k < paths[i].size(); k++) {
if (paths[i][k] != nullptr) {
path.lineTo(paths[i][k]->x, paths[i][k]->y);
}
}
if (!path.isEmpty()) {
QPainter painter(this);
if (painter.isActive()) {
painter.setPen(QPen(Qt::red, 2));
painter.drawPath(path);
}
}
}
}
```
这样就会循环所有的 agv,画出每个 agv 对应的路径。
相关问题
for (int i = 0; i < agvs.size(); i++) { //畫出路綫 if (i < paths.size() && paths[i].size() > 1 && paths[i][0] != nullptr) { QPainterPath path; path.moveTo(paths[i][0]->x, paths[i][0]->y); for (int k = 1; k < paths[i].size(); k++) { if (paths[i][k] != nullptr) { path.lineTo(paths[i][k]->x, paths[i][k]->y); } } if (!path.isEmpty()) { QPainter painter(this); if (painter.isActive()) { painter.setPen(QPen(Qt::red, 20)); painter.drawPath(path); } } } },修改爲:畫出agv的整個路徑
可以将上述代码修改为:
```
for (int i = 0; i < agvs.size(); i++) {
if (i < paths.size() && paths[i].size() > 1 && paths[i][0] != nullptr) {
QPainterPath path;
path.moveTo(paths[i][0]->x, paths[i][0]->y);
for (int k = 1; k < paths[i].size(); k++) {
if (paths[i][k] != nullptr) {
path.lineTo(paths[i][k]->x, paths[i][k]->y);
}
}
if (!path.isEmpty()) {
agvs[i]->setPath(path); // 设置AGV的整个路径
QPainter painter(this);
if (painter.isActive()) {
painter.setPen(QPen(Qt::red, 20));
painter.drawPath(path);
}
}
}
}
```
这样就可以同时画出AGV的整个路径,并将路径保存在AGV对象中。注意需要在AGV类中添加`setPath`方法来保存路径。
if (!paths.empty()) { for (int i = 0; i < paths.size(); i++) { for (int j = i + 1; j < paths.size(); j++) { // 判断两个路径的第一个节点是否相同 if (paths[i][0]->x == paths[j][0]->x && paths[i][0]->y == paths[j][0]->y) { std::cout << "i: " << i << " j: " << j << std::endl; } } } }else { std::cout << "Paths is empty!" << std::endl; },怎麽優化代碼
这段代码本身已经比较简洁高效,但是还是有一些可以优化的地方:
1. 使用范围 for 循环:可以使用范围 for 循环代替普通的 for 循环,使代码更加简洁易读。
2. 使用迭代器:可以使用迭代器来代替下标访问,避免下标越界的问题。
3. 使用哈希表:如果 paths 数组比较大,可以考虑使用哈希表来存储路径的第一个节点,加速查找过程。
4. 并行计算:如果机器具有多核处理器,可以考虑使用并行计算,使用 OpenMP 或者其他并行计算库加速程序的执行。
下面是优化后的代码:
```
if (paths.empty()) {
std::cout << "Paths is empty!" << std::endl;
return;
}
std::unordered_map<std::pair<int, int>, int> node_map; // 哈希表存储节点
int index = 0;
for (auto& path : paths) {
auto node = path[0];
auto pos = std::make_pair(node->x, node->y);
if (node_map.find(pos) == node_map.end()) {
node_map[pos] = index++;
}
}
for (int i = 0; i < paths.size(); i++) {
auto node_i = paths[i][0];
auto pos_i = std::make_pair(node_i->x, node_i->y);
auto index_i = node_map[pos_i];
for (int j = i + 1; j < paths.size(); j++) {
auto node_j = paths[j][0];
auto pos_j = std::make_pair(node_j->x, node_j->y);
auto index_j = node_map[pos_j];
if (index_i == index_j) {
std::cout << "i: " << i << " j: " << j << std::endl;
}
}
}
```
优化后的代码使用了 unordered_map 来存储路径的第一个节点,加速了查找过程。同时使用了范围 for 循环和迭代器访问,使代码更加简洁易读。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)