AOI十字链表python简单实现,仅用作学习,理解基本原理
AOI一般是C++去实现,本文章python写仅用来入门了解
场景内维护两个实体链表
list_x和list_y
所有实体根据x坐标大小排序,在list_x上
所有实体根据y坐标大小排序,在list_y上
实体位置改变时候,需要改变实体在list_x,list_x的位置
实体的AOI范围, 根据AOI半径 在list_x,list_x上遍历即可
十字链表发在计算AOI范围内对象时,计算量非常小,且跟空间大小无关,因此省去大量无效的遍历过程。十字链表法也有一些需要注意的地方,因为在两条链表中都必须按照大小顺序进行排列,因此对象在不停的移动,会带来比较大量的计算。
python版本:2.7
# coding: utf-8
class Entity(object):
def __init__(self, eid, x, y):
self.id = eid
self.x = x
self.y = y
self.radius = 5 # AOI半径
def __str__(self):
return "<{0},{1}-{2}>".format(self.id, self.x, self.y)
def enter(self, pobj):
print("{0} enter {1} view".format(pobj, self))
def leave(self, pobj):
print("{0} leave {1} view".format(pobj, self))
def move(self, pobj):
print("{0} move in {1} view".format(pobj, self))

本文介绍了使用Python实现AOI(AreaofInterest)十字链表的基本原理,通常AOI链表用C++实现。文章中展示了如何维护两个按坐标排序的实体链表,并在实体位置改变时更新其在链表中的位置。十字链表在计算AOI范围内的对象时效率高,但对象移动频繁时计算量较大。示例代码包括添加、删除、更新位置和获取AOI范围内的实体等操作。
最低0.47元/天 解锁文章
1461

被折叠的 条评论
为什么被折叠?



