遍历三维骨架
来源:互联网 发布:维也纳会议 知乎 编辑:程序博客网 时间:2024/04/27 14:38
type def struct edge{ int adjvex; int weight; struct edge *next;}ELinkl
1、图的概念
1.1 邻接表的存储结构
typedef struct edge{int adjvex;int weight;struct edge *next;}ELink;typedef struct ver{Point vertex;ELink *link;}VLink ;
骨架的结构复杂,
有自交的环,圈
分支多,还有小型区域等
三维数据多采用一维数组的存储方式,so,不宜直接采用graph的方式存储
比如建立图的过程其实就是把vertex顶点按照一定顺序存起来的过程。
收到BFS的启发,本程序采用加一queue来存储当前点邻域内的点,并做标记
void putskletoninorder(){//int i=0;//vector <Point> center;int i,j,k;Point firstseed;//queue<Point> q;for ( i =0;i< skeletondata->getXsize();i++){for ( j=0;j<skeletondata->getYsize();j++){for ( k=0;k<skeletondata->getZsize();k++){//int count=0;if (skeletondata->get(i,j,k)!=0){//count++;//if (count ==1)//{firstseed.x=(long long)i;firstseed.y=(long long)j;firstseed.z=(long long)k;firstseed.value=0;break;//}}}}}center.push_back(firstseed);checkadj(firstseed);while(!q.empty()){Point pos=q.front();checkadj(pos);q.pop();}}
void checkadj(Point firstseed){for (int l = -1; l <=1 ;l++){for (int m =-1; m<= 1; m++){for(int n=-1; n<= 1;n++){int posx = firstseed.x+l;int posy = firstseed.y+m;int posz = firstseed.z+n;if (skeletondata->get(posx,posy,posz)!=0){//firstseed.value=0;Point pos(posx,posy,posz,0);skeletondata->put(posx,posy,posz,0);center.push_back(pos);q.push(pos);}}}}}
以上效率基本最高,为O(N),如果大家想到更好的办法欢迎交流
0 0
- 遍历三维骨架
- 三维骨架化
- 三维网格的骨架提取
- 基于轮廓的三维骨架重建方法和核心代码
- 三维数组for循环遍历
- 使用foreach遍历三维数组
- jquery遍历三维数组形成的json
- 遍历一维、二维、三维数组
- PHP三维数组的定义与遍历
- 三维网格骨架提取形态学调整牙齿模型分割算法应用于医疗正畸软件初步设计效果图
- 三维数组,统计三维里的某个元素个数 [用二维再遍历]
- OpenCV三维图像的创建和数据遍历
- 骨架提取
- python 骨架
- Maven骨架
- 骨架变换
- Nodejs 骨架
- Kinect2入门+opencv画骨架+骨架数据
- 数据结构与程序架构(三)
- mac下ffmpeg交叉编译与安装
- 文档结构视图(2)
- centOS安装scikit-learn
- PuTTy Connection Manager
- 遍历三维骨架
- 文档结构视图(3)
- 发福利啦!学Spark课程送Spark技术峰会的门票........
- fzu 2155 盟国 并查集的增删
- 有道 VS [csdn]
- Servlet读写文件
- 放下的资格
- UIColor和UIImage转换
- html 5 学习笔记-重要知识点 1