使用运动矢量来检测2D场中的冲击

时间:2017-03-30 18:06:21

标签: algorithm

给定坐标和运动矢量。如何才能获得所有块的列表?

我觉得它有点像"对象在视野中"或"对象碰撞"?

例如,原点 O 是(2,2),运动矢量"→" 是(0,1)和块 B 应为[(1,3),(1,4),(2,4),(3,3),(3,4)]

 0123 y→
0.......
1...BB..
2..O→B..
3...BB..
x.......
↓.......

如果运动矢量为(-1,1),则 B 应为[(0,2),(0,3),(0,4),(1,4) ,(2,4)]

 0123 y→
0..BBB..
1...↗B..
2..O.B..
3.......
x.......
↓.......

我正在考虑

point P (x, y) vector V (v, u)
x' = x + v
y' = y + u
set S = ([x'-1, x'+1], [y'-1, y'+1])
calculate a line L "y=ax+b" perpendicular to V crossing (x', y').
split S into two groups by L
chose the one V is facing

但我无法找到实现最后两步的方法。

任何建议都会有所帮助。

1 个答案:

答案 0 :(得分:0)

我认为您所寻找的是time-until-impacttime-until-collision之类的东西。

但在大多数游戏引擎中,这不是可行的方法。用于冲突处理的标准技术是空间分区。这意味着,如果模拟中有n个刚体,那么一个简单的算法需要n^2个检查(每个都需要另一个)以查看是否发生了碰撞。然而,在性能方面,这是一个杀手。相反,你应该通过(“均匀分区”,“十月树”,“Z-排序”等)对空间进行分区,然后只检查与相关单元格相邻的邻近刚体。

注意,这里并不真正需要速度矢量(你称之为运动)矢量,因为在实践中它没有带来任何好处。