C语言实现一个四叉树(quadtree) -电脑资料

用C语言实现一个2维四叉树quadtree,具有一定的实际意义,

C语言实现一个四叉树(quadtree)

。你可以把几何图形的索引(用long型的id标识)放到这个树中(根据最小边界矩形)。quadtree可以用来快速区域查找图形,虽然不是那么精确,但是毕竟没有漏掉的。虽然quadtree的效率不如RTree?但是RTree 的实现毕竟复杂了些,我会尽快收集整理出RTree的代码。RTree确实比QuadTree好的多?(起码RTree很时髦啊!)

头文件如下:

/*

* quadtree.h

*        Quad tree structure -- for spatial quick searching

*        cheungmine

*      Oct. 5, 2007.  All rights reserved.

*/

#ifndef QUADTREE_H_INCLUDED

#define QUADTREE_H_INCLUDED

#include "unistd.h"

#include "list.h"

#define QUAD_SUBNODES 4

#define QBOX_OVERLAP_MAX 0.4

#define QBOX_OVERLAP_MIN 0.02

#define QTREE_DEPTH_MAX 8

#define QTREE_DEPTH_MIN 4

#define QUADRANT_BITS  3

/* a quadrant defined below:

NW(1)   |    NE(0)

-----------|-----------

SW(2)   |    SE(3)

*/

typedef enum

{

NE = 0,

NW = 1,

SW = 2,

SE = 3

}QuadrantEnum;

/* a box defined below:

_____max

|__|__|

|__|__|

min

*/

typedef struct _quadbox_t

{

double _xmin,

_ymin,

_xmax,

_ymax;

}quadbox_t;

/* quad node */

typedef struct _quadnode_t

{

quadbox_t  _box;  /* node bound box */

list_t   *_lst;  /* node data list */

struct _quadnode_t  *_sub[QUAD_SUBNODES];  /* pointer to subnodes of this node */

}quadnode_t;

/* quad tree */

typedef struct _quadtree_t

{

quadnode_t *_root;

int    _depth;  /* max depth of tree: 0-based */

float   _overlap;  /* overlapped ratio of quanbox */

}quadtree_t;

/*=============================================================================

Public Functions

=============================================================================*/

/* creates a quadtree and returns a pointer to it */

extern  quadtree_t*

quadtree_create (quadbox_t    box,

int  depth,  /* 4~8 */

float overlap /* 0.02 ~ 0.4 */

);

/* destroys a quad tree and free all memory */

extern  void

quadtree_destroy (IN  quadtree_t  *qtree

);

/* inserts a node identified by node_key into a quadtree, returns the node quadtree encoding */

extern  quadnode_t *

quadtree_insert (IN  quadtree_t            *qtree,

IN  long                 node_key,

IN  quadbox_t            *node_box

);

/* searches nodes inside search_box */

extern  void

quadtree_search (IN  const quadtree_t    *qtree,

IN  quadbox_t            *search_box,

OUT list_t                *results_list

);

#endif // QUADTREE_H_INCLUDED

实现文件如下:

/*

* quadtree.c

*        Quad tree implementation -- for spatial quick searching

*        cheungmine

*      Oct. 5, 2007.  All rights reserved.

*/

#include "quadtree.h"

#include

/*=============================================================================

Private Functions

=============================================================================*/

static BOOL quadbox_is

_valid (quadbox_t    *qb)

{

return (qb->_xmin < qb->_xmax && qb->_ymin < qb->_ymax)? TRUE : FALSE;

}

static double quadbox_width (const quadbox_t* qb)

{

return (qb->_xmax - qb->_xmin);

}

static double quadbox_height (const quadbox_t* qb)

{

return (qb->_ymax - qb->_ymin);

}

static void quadbox_init (quadbox_t    *qb,

double xmin, double ymin, double xmax, double ymax)

相关文章

中秋节的传说150字

中秋节的传说150字,看看下文,希望可以帮助到你。欢迎你的阅读参考。中秋传说之一——嫦娥奔月相传,远古时候天上有十日同时出现,晒得庄稼枯死,民不聊生,一个名叫后羿的英雄,力大无穷,他同情受苦的百姓,登...
资料大全2015-08-05
中秋节的传说150字

跑步机正确锻炼方法

相信大家对于跑步机肯定是不会陌生吧,跑步机是我们常见的一种运动器材,我们可以在跑步机上进行跑步,跑步机可以起到很好的锻炼身体作用,此外跑步机的优点是使用方便,不会受到环境的影响,所以跑步机深受人们的喜...
资料大全2011-07-02
跑步机正确锻炼方法

宝宝十个月发育标准

人体的每个阶段都有一定的发育标准,这样才可以使得我们知道身体发育是否完整和健康。身体抵抗力也是很重要的,所以我们要了解在不同的时期人体的发育情况,尤其是宝宝的成长,是每个父母都十分关心的。那么,下面就...
资料大全2013-07-06
宝宝十个月发育标准

新鲜笔经分享 Numerical & Verbal

Numerical: 是跟UBS, Standard Chartered, Barclay一样的题型,之前UBS做过两次了,今天早上就翻了旧题热热身,做得挺顺利的,但是知道自己有道题算错了:-( 上...
资料大全2016-05-04
新鲜笔经分享 Numerical & Verbal

山东征集志愿的学校

015年普通高校一本二批艺术文艺术理征集志愿院校专业计划代号院校及专业名称科类学制(年)计划数年收费(元)C714西安翻译学院500戏剧影视文学(非美术类校考成绩)艺术文41001播音与主持艺术(非美...
资料大全2019-09-01
山东征集志愿的学校

火锅店开业广告语

火锅店开业广告语1好的广告词能够为餐饮服务和商品附加上独特的魅力,为大家带来的是20xx火锅店开业广告语,欢迎阅读参考。春意盎然人气爽,美味火锅润人肠,谁知神仙因为狂,只缘香气飘四方。品火锅到八角,色...
资料大全2013-06-07
火锅店开业广告语