日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《校园地图》的剖析

發布時間:2025/5/22 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《校园地图》的剖析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
《校園地圖》的剖析
1.該項目小地圖的功能
????????? 該小地圖的主要功能是從下拉列表中選擇出發地和目的地,然后地圖上可以顯示路線。主要的顯示方法是通過貼圖來顯示
2.實現該小地圖軟件的代碼
????????? typedef struct road_dot{
??????? int i;?? // 該節點的id
??????? int vistable; //該節點是否可訪問
??????? cv::Point self; //該節點在地圖上的位置
??????? std::vector<size_t> others_id;? // 保存與該節點相連的節點的id
??? }Road_node;
????? 該段代碼用來記錄所有的路網節點 void MainWindow::mousePressEvent(QMouseEvent *event)
{ if(0<x&&x<1480&&0<y&&y<800)? // if on the pic
??? { Road_node new_node;
???????? new_node.self = Point(x,y);
???????? new_node.i = 200;? // not a pos cv::circle(img,Point(x,y),6,cv::Scalar(255,0,255),-1);
???????? qimg = Mat2QImage(img);
???????? ui->pic->setPixmap(QPixmap::fromImage(qimg));
???????? if(!first_node)
???????? {start_node = new_node;start_set_flag = 1; first_node =2;pre_nodes_id = 0;} for(int i = 0;i<point.size();i++)
???????? {
???????????? if((abs(x-point[i].x) <10 )&& (abs(y-point[i].y)<10))? // if at pos
?????????????? {
???????????????? new_node.i = i;
???????????????? qDebug()<<"this is pos "<<i;
???????????????? break;
?????????????? }
???????? } road.push_back(new_node);// record this new node ;
?????? for(int i = 0;i<road.size()-1;i++)
?????? {
?????????? if((abs(x-road[i].self.x) <10 )&& (abs(y-road[i].self.y)<10))? // if at node
?????????? {? // yes road.pop_back();? // drop this node
?????????????? if(event->button() == Qt::LeftButton)?? // if leftButton
??????????????? { start_node = road[i];? // set start node
?????????????????? start_set_flag = 1; pre_nodes_id = i; }
?????????????? else if(event->button() == Qt::RightButton)
?????????????? { start_node = road[pre_nodes_id];?? // this is start
?????????????????? start_set_flag = 1; end_node = road[i];
?????????????????? end_set_flag = 1; road[i].others_id.push_back(pre_nodes_id);
?????????????????? road[pre_nodes_id].others_id.push_back(i); pre_nodes_id = i;
?????????????? } qDebug()<<"this node's others.size = "<<road[i].others_id.size(); break;
??????????? }
?????????? else if(i == road.size() - 2)
?????????? {? // no if(!start_set_flag) // if have no start_node
?????????????? {
?????????????????? start_node = road[pre_nodes_id];
?????????????????? start_set_flag = 1;
?????????????? }
?????????????? if(!end_set_flag)
?????????????? {
?????????????????? end_node = road[road.size()-1];
?????????????????? end_set_flag = 1;
?????????????? } road[pre_nodes_id].others_id.push_back(road.size()-1);? // push now node
?????????????? road[road.size()-1].others_id.push_back(pre_nodes_id);
?????????????? qDebug()<<"this node's others.size = "<<road[road.size()-1].others_id.size();
?????????????? pre_nodes_id = road.size()-1;
?????????????? break; }
?????? } if(end_set_flag && start_set_flag)
?????? { end_set_flag = 0;
?????????? start_set_flag = 0;
?????????? cv::line(img,start_node.self,end_node.self,cv::Scalar(0,0,0),3);
?????????? qimg = Mat2QImage(img);
?????????? ui->pic->setPixmap(QPixmap::fromImage(qimg)); // flush the pic }
???? qDebug()<<"road.size"<<road.size();
??? }
}? // :)
???????????? 該段代碼用來標記路網并自動儲存,主要通過在地圖上點擊來標記,右鍵表示一個連續段的結束,每個節點會記錄與之相連的其它節點的id號。 int start_id = ui->comboBox->currentIndex();? // get start and end node's id /
??? int end_id = ui->comboBox_2->currentIndex(); for(int i = 0;i<road.size();i++)
??? {
??????? road[i].vistable = 0;? // set all nodes are visitable;
??? } //? Road_node start_node_temp,end_node_temp;? // temp node int road_start_i,road_end_i;
??? int road_start_i_temp,road_end_i_temp;
??? for(int i = 0;i<road.size();i++) // search which node is on the start/end point;
??? {
??????? if(road[i].i == start_id)
??????? {
??????????? qDebug()<<"start"<<i;
??????????? start_node = road[i];
??????????? road_start_i = i;? // get the id of start roadnode;
??????????? qDebug()<<"i = "<<start_node.i;
??????? }
??????? else if(road[i].i == end_id)
??????? {
??????????? qDebug()<<"end"<<i;
??????????? end_node = road[i];
??????????? road_end_i = i;? // get the id of end roadnode;
??????????? qDebug()<<"i = "<<end_node.i;
??????? } } road_start_i_temp = road_start_i;
??? road_end_i_temp = road_start_i; // start_node_temp = start_node;
??? //end_node_temp = start_node_temp; std::vector<int> road_temp; int pre_distance = 9000000;
??? while(road[road_end_i_temp].i!= end_id)
??? //for(int xx = 0;xx<10;xx++)
??? { int useable_flag = 0;
??????? for(int i = 0;i<road[road_end_i_temp].others_id.size();i++)?? // if the current endpoint to have next point
??????? {
??????????? if(road[road[road_end_i_temp].others_id[i]].vistable == 0)
??????????????? useable_flag = 1;? // have useable point }
??????? if(useable_flag)?? // have? useable next node
??????? {
?????????? // start_node_temp = end_node_temp;
??????????? road_start_i_temp = road_end_i_temp;
??????????? road[road_start_i_temp].vistable = 1; // have visited it; //start_node_temp.vistable = 1; // have visited it; road_temp.push_back(road_start_i_temp);?? // record the walked node int temp_min_id;
??????????? for(int i = 0;i<road[road_start_i_temp].others_id.size();i++)? // find the min dis node?? // int these next points
??????????? {
??????????????? if(road[road[road_start_i_temp].others_id[i]].vistable == 0 )? // if this node have not visited;
??????????????? { int tempx,tempy;
???????????? tempx = (road[road[road_start_i_temp].others_id[i]].self.x- end_node.self.x)*(road[road[road_start_i_temp].others_id[i]].self.x - end_node.self.x);
???????????? tempy = (road[road[road_start_i_temp].others_id[i]].self.y- end_node.self.y)*(road[road[road_start_i_temp].others_id[i]].self.y - end_node.self.y);
???????????? if(pre_distance<(tempx+tempy))
??????????????? { qDebug()<<"pre_distance = "<<pre_distance;
???????????????? qDebug()<<"now distance = "<<tempx+tempy;
????????????????? //? end_node_temp = road[road[road_start_i_temp].others_id[i-1]];
??????????????????? road_end_i_temp = road[road_start_i_temp].others_id[temp_min_id]; }
???????????? else {
??????????????????? //end_node_temp = road[start_node_temp.others_id[i]];
??????????????????? road_end_i_temp = road[road_start_i_temp].others_id[i];
??????????????????? temp_min_id = i; pre_distance = tempx+tempy;
?????????????????? }
??????????????? } } pre_distance = 9000000; }
?? else // have no useable next node
??????? {
??????????? road[road_end_i_temp].vistable = 1;
????????? loop:??? for(int i = 0;i<road[road_start_i_temp].others_id.size();i++)? // if have other useable nodes
??????????? {
??????????????? if(road[road[road_start_i_temp].others_id[i]].vistable == 0)
??????????????????? useable_flag = 1;? // have useable point } if(useable_flag)
??????????? {
??????????????? int temp_min_id;
??????????????? for(int i = 0;i<road[road_start_i_temp].others_id.size();i++)? // fine the min dis node
??????????????? {
??????????????????? if(road[road[road_start_i_temp].others_id[i]].vistable == 0 )? // if this node have not visited;
??????????????????? { int tempx,tempy;
???????????????? tempx = (road[road[road_start_i_temp].others_id[i]].self.x- end_node.self.x)*(road[road[road_start_i_temp].others_id[i]].self.x - end_node.self.x);
???????????????? tempy = (road[road[road_start_i_temp].others_id[i]].self.y- end_node.self.y)*(road[road[road_start_i_temp].others_id[i]].self.y - end_node.self.y);
???????????????? if(pre_distance<(tempx+tempy))
??????????????????? { //end_node_temp = road[road[road_start_i_temp].others_id[i-1]];
??????????????????????? road_end_i_temp = road[road_start_i_temp].others_id[temp_min_id]; }
???????????????? else {
??????????????????????? //end_node_temp = road[start_node_temp.others_id[i]];
??????????????????????? road_end_i_temp = road[road_start_i_temp].others_id[i]; temp_min_id = i;
??????????????????????? pre_distance = tempx+tempy;
?????????????????????? }
??????????????????? } }
??????????????? pre_distance = 9000000; }
??????????? else
??????????? { road_temp.pop_back(); // drop this start_temp node
??????????????? road_start_i_temp = road_temp[road_temp.size()-1];
??????????????? goto loop;
??????????? }
??????? }
?road_temp.push_back(road_end_i_temp);
??? for(int i = 0;i<road_temp.size()-1;i++)
??? { cv::line(img,road[road_temp[i]].self,road[road_temp[i+1]].self,cv::Scalar(0,0,0),3);
??????? qimg = Mat2QImage(img);
??????? ui->pic->setPixmap(QPixmap::fromImage(qimg)); // flush the pic
??? }
??? qDebug()<<road_temp.size(); } 該代碼為尋路算法,通過設立兩個哨兵,一個在當前出發節點(哨兵A),另一個在下一個目標出發點(哨兵 B),下一個目標出發點由所有子節點中距離目的地最近的節點確定。當B所在的節點具有可走子節點(不是死胡同)并且還未達到目的地時,A走到B(所有走過的路壓棧,方便后退),B繼續探路,若走到死胡同就后退,走其他的最近子節點。 3.優缺點
????? 優點:
?????????? (1)有利于新生和學生父母便于在學校行走,不居于在學校亂走
?????????? (2)能顯示學校具體地點的具體信息,有利于了解學校概況
????? 缺點:
??????????? (1)涉眾不多,一旦新生適應了就不會用了,則客戶群不穩定
??????????? (2)功能較少,沒新鮮點和創新點
4.增加點
???????????? 可以和學校的社團,美食街,校團委合作,在校園地圖的軟件上用圖片展示學校的社團的活動,美食,團委消息,賽事等等 5.代碼來源
作者:whlook
來源:CSDN
原文:https://blog.csdn.net/whlook/article/details/77076395
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

轉載于:https://www.cnblogs.com/smalle/p/10469716.html

總結

以上是生活随笔為你收集整理的《校园地图》的剖析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久久社区 | 国产黄色网页 | 国产农村妇女毛片精品 | 九九在线观看高清免费 | 色播一区二区 | 黄色在线免费观看网站 | 一区二区三区欧美日韩 | 麻豆av一区二区三区 | 欧美日韩一区二区三区在线 | 午夜精品久久久内射近拍高清 | 嫩草影院在线免费观看 | 欧美特级黄色录像 | 国产xxx69麻豆国语对白 | 涩涩爱在线 | 中文字幕av解说 | 无码国产精品高潮久久99 | 国产中文在线视频 | 国产黄色观看 | 最近的中文字幕 | 精品动漫一区二区 | 国产一区二区三区影院 | 看日本黄色录像 | 日韩欧美黄色 | 中出在线视频 | av直接看 | 全黄一级裸体 | 伊人一级 | 狠狠躁夜夜躁人人爽视频 | 婷婷在线视频观看 | 激情内射亚洲一区二区三区爱妻 | 麻豆福利影院 | 国产精品815.cc红桃 | 一级特黄毛片 | 国产欧美一区二区在线观看 | 欧美亚洲图片小说 | 欧美一性一乱一交一视频 | 国产又色又爽又黄的 | 涩涩资源网 | 久久久亚洲综合 | 韩国黄色大片 | 免费无码不卡视频在线观看 | 男女午夜免费视频 | 国产又粗又猛又爽又黄视频 | 午夜影院18 | 欧美性一区二区三区 | 久久久精品国产sm调教 | 黑人中文字幕一区二区三区 | 一个人看的www片免费高清中文 | 中文字幕日本一区二区 | 日韩中文字幕网 | 日韩高清影视在线观看 | 中文字幕一区二区人妻痴汉电车 | 日本黄色网页 | 精品久久久99 | 国产伦精品一区二区三区视频痴汉 | av毛片在线免费观看 | av资源在线看 | 欧美丰满老熟妇aaaa片 | 麻豆一区二区在线 | 欧美精品国产动漫 | 男女国产精品 | 狠狠97| av中文字幕一区 | 国产最新自拍 | 97精品一区二区 | 国产巨乳在线观看 | 免费在线观看一区二区 | 国产初高中真实精品视频 | 拍国产真实乱人偷精品 | 性渴老太作爱 | 曰本女人与公拘交酡 | 五月深爱网 | 99久久久无码国产精品性色戒 | 99久久一区 | 无人码人妻一区二区三区免费 | 免费成人小视频 | 色婷婷av国产精品 | 一级色视频 | 葵司有码中文字幕二三区 | 18成人在线观看 | 操久久久 | 日本做爰高潮又黄又爽 | 国产麻豆久久 | 午夜精品免费 | 吖v在线 | aa在线| 日韩黄色高清视频 | www,五月天,com| 中文字幕乱码亚洲精品一区 | 96看片| 加勒比毛片 | 亚洲欧美综合另类 | 91精品人妻一区二区 | 青青草免费在线 | 色哟哟无码精品一区二区三区 | 国产在线视频一区二区 | 久热这里有精品 | 人人干天天干 | 中文字幕亚洲乱码熟女一区二区 |