给定坐标和运动矢量。如何才能获得所有块的列表?
我觉得它有点像"对象在视野中"或"对象碰撞"?
例如,原点 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
但我无法找到实现最后两步的方法。
任何建议都会有所帮助。
答案 0 :(得分:0)
我认为您所寻找的是time-until-impact
或time-until-collision
之类的东西。
但在大多数游戏引擎中,这不是可行的方法。用于冲突处理的标准技术是空间分区。这意味着,如果模拟中有n
个刚体,那么一个简单的算法需要n^2
个检查(每个都需要另一个)以查看是否发生了碰撞。然而,在性能方面,这是一个杀手。相反,你应该通过(“均匀分区”,“十月树”,“Z-排序”等)对空间进行分区,然后只检查与相关单元格相邻的邻近刚体。
注意,这里并不真正需要速度矢量(你称之为运动)矢量,因为在实践中它没有带来任何好处。