一些在计算机图形学中经常使用的数据结构
来源:互联网 发布:网络盒子刷机 编辑:程序博客网 时间:2024/05/22 15:06
BSP:试图将所有的板(在BSP中叫做平面)组织成一棵树,每个平面均将它所在的空间分割为前后两个部分,这两个部分又分别被另外的平面分割成更小的空间……直到最后,达到分割的要求。
http://school.ogdev.net/ArticleShow.asp?id=5935&categoryid=5
The process of constructing a BSP tree is fairly straitforward:
- First, select a partition hyperplane. For this dicussion, we will use a 2 dimensional world and our root node will be a line.
- Partition all polygons in the world with the initial partition hyperplane, storing them in either the front or back polygon list.
- recurse or iterate through the front and back polygon list, creating a new tree node and attaching it the the left or right leaf of the parent node.
http://web.cs.wpi.edu/~matt/courses/cs563/talks/bsp/document.html
四叉树:关注其中的Code
http://www.cnblogs.com/xinxianshi/archive/2011/08/21/2157249.html
/* 一个矩形区域的象限划分::
UL(1) | UR(0)
----------|-----------
LL(2) | LR(3)
以下对该象限类型的枚举
*/ typedef enum { UR = 0, UL = 1, LL = 2, LR = 3 }QuadrantEnum;/* 矩形结构 */ typedef struct quadrect_t { double left, top, right, bottom; }quadrect_t;/* 四叉树节点类型结构 */ typedef struct quadnode_t { quadrect_t rect; //节点所代表的矩形区域 list_t *lst_object; //节点数据, 节点类型一般为链表,可存储多个对象 struct quadnode_t *sub[4]; //指向节点的四个孩子 }quadnode_t;/* 四叉树类型结构 */ typedef struct quadtree_t { quadnode_t *root; int depth; // 四叉树的深度 }quadtree_t;
八叉树 Octree:类比四叉树,看一下它中间的Code
http://blog.csdn.net/timzc/article/details/6060591
template<class T> struct OctreeNode { T data; //节点数据 T xmin,xmax; //节点坐标,即六面体个顶点的坐标 T ymin,ymax; T zmin,zmax; OctreeNode <T> *top_left_front,*top_left_back; //该节点的个子结点 OctreeNode <T> *top_right_front,*top_right_back; OctreeNode <T> *bottom_left_front,*bottom_left_back; OctreeNode <T> *bottom_right_front,*bottom_right_back; //节点类构造函数 OctreeNode(T nodeValue = T(), T xminValue = T(),T xmaxValue = T(), T yminValue = T(),T ymaxValue = T(), T zminValue = T(),T zmaxValue = T(), OctreeNode<T>* top_left_front_Node = NULL, OctreeNode<T>* top_left_back_Node = NULL, OctreeNode<T>* top_right_front_Node = NULL, OctreeNode<T>* top_right_back_Node = NULL, OctreeNode<T>* bottom_left_front_Node = NULL, OctreeNode<T>* bottom_left_back_Node = NULL, OctreeNode<T>* bottom_right_front_Node = NULL, OctreeNode<T>* bottom_right_back_Node = NULL ) :data(nodeValue), xmin(xminValue),xmax(xmaxValue), ymin(yminValue),ymax(ymaxValue), zmin(zminValue),zmax(zmaxValue), top_left_front(top_left_front_Node), top_left_back(top_left_back_Node), top_right_front(top_right_front_Node), top_right_back(top_right_back_Node), bottom_left_front(bottom_left_front_Node), bottom_left_back(bottom_left_back_Node), bottom_right_front(bottom_right_front_Node), bottom_right_back(bottom_right_back_Node) {};};
二叉搜索树:Code很清楚
http://www.cppblog.com/converse/archive/2006/07/29/10665.html
template<typename T>struct BTreeNode{ T Data; BTreeNode* pLeft; BTreeNode* pRight; BTreeNode* pParent; BTreeNode(T data = T(), BTreeNode<T>* Parent = NULL, BTreeNode<T>* Left = NULL, BTreeNode<T>* Right = NULL) : Data(data), pLeft(Left), pRight(Right), pParent(Parent) { }};
kd-tree:关注kd-tree的用途和构建算法
http://www.cnblogs.com/slysky/archive/2011/11/08/2241247.html
这篇博客中的例子很清楚的解释了如何构造kd-tree。推荐看:An intoductory tutorial on kd-trees
最小生成树:给定一个带权的无向连通图G,如果存在子图G'包含G中所有顶点和一部分边,且不形成回路,则称G'为图G的生成树,使树上所有边上权的总和最小的称为最小生成树。
http://www.cnblogs.com/chinazhangjie/archive/2010/12/02/1894314.html(大家可以看看是如何做“查环”的)
http://www.wutianqi.com/?p=1284
如果大家知道计算几何的话,可以将最小生成树和voronoi图/delaunay三角剖分结合
图割:
http://hi.baidu.com/%D2%B9%CB%AE%BE%A7%CD%F5%BD%A8%C7%E0/blog/item/48a637014e584c05738da590.html(简单的介绍)
http://hi.baidu.com/%D2%B9%CB%AE%BE%A7%CD%F5%BD%A8%C7%E0/blog/item/b02a82f3e590b2cd0a46e0e2.html(简单算法的介绍)
http://hi.baidu.com/cs%D6%AE%D0%A1%D0%A1%CA%E9%CD%AF/blog/item/cb5c232e39f213201e30895c.html(简单的代码)
- 一些在计算机图形学中经常使用的数据结构
- 计算机图形学的一些资料
- 计算机图形学的一些算法
- 计算机图形学的一些公式
- 计算机图形学使用的数学
- 计算机图形学的一些算法研究
- 计算机图形学的一些基本问题
- python3 一些经常使用的数据结构和内置方法。
- SDL Linux下的使用 计算机图形学
- 计算机图形学中的Mesh数据结构
- 计算机图形学第四章---图形的表示与数据结构
- 收集的伪静态中经常使用的一些参数
- 初接触计算机图形学看到的一些有趣的英文
- 经常使用的一些网站
- Java中经常使用的一些DOS命令
- 计算机图形学的学习
- 计算机图形学的学习
- 关于 计算机图形学的
- java對於數組的反射
- phpcms V9 安装后台无法打开解决方案
- Epoll在LT和ET模式下的读写方式
- 基于路网距离的最近邻居查询
- 泛型中的?通配符
- 一些在计算机图形学中经常使用的数据结构
- HBase -ROOT-和.META.表结构(region定位原理)
- Helix Streaming Server 简单配置
- 权限管理 (一) 设计思路分析和实现授权、认证
- Parallel Computing with MATLAB
- serialVersionUID 的作用
- 使用UITextFieldDelegate来隐藏键盘
- Android HAL详解(一)
- android通过webservice进行网络编程,使用工具类实现