【发布时间】:2012-01-25 08:51:58
【问题描述】:
我正在搜索有关优化碰撞检测的信息。
有一个物体(圆)从点a移动到点b。这个物体的半径为r,而且场内也有很多障碍物(圆)。
我有一个算法(函数)来检查圆和胶囊之间的碰撞,我目前为每个障碍物调用这个函数:
for-each (o : obstacles)
if collide(o, Capsule(a,b,r))
return true;
return false;
许多障碍物距离运动物体很远,可以通过碰撞检测功能忽略它们。
我的问题是:
是否有解决方案可以忽略使用碰撞检测功能检查所有障碍物? 最近邻搜索或KD树之类的?
编辑:所有障碍物的半径相同。
【问题讨论】:
-
你有多少障碍?它们的密度是多少?碰撞是经常发生还是很少发生?
-
想想 100 个障碍物,它们是稀疏分布的。算法每 10 毫秒调用一次。
-
我认为我的程序的关键是这个问题。
-
您应该尝试分析您的程序以确保您找到了瓶颈。另外,kd-tree 似乎适合您的问题,如果有帮助,您尝试过吗?
-
我之前使用 kd-tree 来查找离给定点最近的点。但是这种情况下不知道怎么用kd-tree!
标签: algorithm optimization collision-detection