分类: 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;
可视半径与网格边长的限制:
方案a:
如果可视半径为n,则最多覆盖9个格子,如下图。
方案b:
如果可视半径为n/2,则最多覆盖4个格子,如下图:
方案a的缺点是要遍历的格子数多,9个。优点是不论什么情况,只要遍历周边9个格子。
方案b的缺点是需要计算要遍历哪4个格子。优点是遍历的格子数小。
我觉得方案a更简单明了,所以选择方案a.
代码:aoi.zip