我正在为碰撞检测编写一些代码,假设有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]))
如果这看起来好不好,我明天就会删除这个问题。
答案 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)