Chinaunix首页 | 论坛 | 博客
  • 博客访问: 98246
  • 博文数量: 41
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 486
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-18 20:09
文章分类

全部博文(41)

文章存档

2016年(1)

2015年(1)

2014年(9)

2013年(30)

我的朋友

分类: C/C++

2014-02-08 15:11:14

 

Aoi=area of interest, 即可视范围内的实体列表。

有如下2种成熟的做法。

1,网格法

http://www.cnblogs.com/sniperHW/archive/2012/09/29/2707953.html

 

2,双链表法

 

网格法:

把一张场景地图分割行数为row, 列数为column, 每个格子是边长为n的正方形网格。每个网格包含一个实体列表。实体进入网格,则记录进列表。

 

如何根据坐标获得所在网格:

    int column=x/m_distance;
    int row=y/m_distance;

 

 

可视半径与网格边长的限制:

方案a:

如果可视半径为n,则最多覆盖9个格子,如下图。


 

方案b:

如果可视半径为n/2,则最多覆盖4个格子,如下图:


 

 

方案a的缺点是要遍历的格子数多,9个。优点是不论什么情况,只要遍历周边9个格子。

方案b的缺点是需要计算要遍历哪4个格子。优点是遍历的格子数小。

 

我觉得方案a更简单明了,所以选择方案a.
代码:aoi.zip


阅读(971) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~