【发布时间】:2016-02-24 13:42:18
【问题描述】:
我有一组 3d 对象 {obj1,obj2,.....objn} 和一个 3D 边界框 B 。现在要找到在边界框 B 内或与边界框 B 相交的对象集,我正在使用下面的代码,其计算时间为 O(n)
for(int i = 0; i < n; i++){
obj = objectsArray[i];
objBox = obj.BoundingBox;
if ((B.Max.Z > objBox.Max.Z || B.Max.Z > objBox.Min.Z) && (B.Min.Z < objBox.Max.Z || B.Min.Z < objBox.Min.Z) && (B.Max.X > objBox.Max.X || B.Max.X > objBox.Min.X) && (B.Min.X < objBox.Max.X || B.Min.X < objBox.Min.X) && (B.Max.Y > objBox.Max.Y || B.Max.Y > objBox.Min.Y) && (B.Min.Y < objBox.Max.Y || B.Min.Y < objBox.Min.Y)) {
// obj is inside or overlapping box B
ObjectsInsideB.add(obj)
} else{
// obj out of box B
}
}
// objBox.Max bounding box vertex at maximum end
// objBo.min bounding box vertex at minimum end
我正在寻找有效的方法来计算它,以减少 O(n) 搜索,有什么办法吗?由于边界框 B 每帧都在变化,因此对于 100000 个对象来说非常慢。
【问题讨论】:
-
物体坐标是否也发生了变化?还是只是移动的边界框?
-
只是边界框在移动,在所有对象中,有 10% 的对象在移动,其余的都是静态的。
标签: algorithm optimization data-structures