如何将此碰撞检测位表示为矩阵运算?

时间:2016-07-29 06:07:56

标签: matrix

我正在为碰撞检测编写一些代码,假设有2个对象由这2个矩阵表示:

object1 = [ [x_min, x_max], [y_min, y_max], [z_min, z_max]] 

object2 = [ [x_min, x_max], [y_min, y_max], [z_min, z_max]] 

其中对象的各自值(x_min,x_max等)不同。

我想说:

object1.x_min < object2.x_max and object1.x_max > object2.y_min  and
object1.y_min < object2.y_max and object1.y_max > object2.y_min  and
object1.z_min < object2.z_max and object1.z_max > object2.z_min

我如何将其表达为某种矩阵运算?很高兴重新排列矩阵布局。

非常感谢。

GOT SOMETHING WORKING

首先我重新排列矩阵:

object1 = np.matrix([ [x_min, y_min, z_min], [x_max, y_max, z_max]] )
object2 = np.matrix([ [x_min, y_min, z_min], [x_max, y_max, z_max]] )

然后我就这样做了:

np.all(np.logical_and(object1[0] < object2[1],object1[1] > object2[0]))

如果这看起来好不好,我明天就会删除这个问题。

1 个答案:

答案 0 :(得分:0)

进一步改进

没有任何理由(对我来说很明显)保持最小值即。 x_min,y_min,z_min,在相同的矩阵中作为最大值ie。 x_max,y_max,z_max。通过将它们分成它们自己的矩阵,我获得了将许多物体存储在同一矩阵中的能力。

所以而不是

object1 = np.matrix([ [x_min, y_min, z_min], [x_max, y_max, z_max]] )
object2 = np.matrix([ [x_min, y_min, z_min], [x_max, y_max, z_max]] )

我可以

objects_min = np.matrix([ [x_min, y_min, z_min], [x_min, y_min, z_min], [x_min, y_min, z_min]....] )
objects_max = np.matrix([ [x_max, y_max, z_max], [x_max, y_max, z_max], [x_max, y_max, z_max]....] )

其中每行是不同的对象。所以现在,如果我有一个新对象,我想与所有这些对象进行比较,那么操作也可以进行矢量化。

看起来像是:

collisions = np.all(np.logical_and(new_object_min < objects_max  , new_object_max > objects_min), axis =1)