边界框计算



我们的边界框计算算法是这样实现的。我们还能做些什么来提高速度吗?还是解决同一问题的不同方法?

谢谢。

boxMin.X = boxMax.X = points[0].X;
boxMin.Y = boxMax.Y = points[0].Y;
boxMin.Z = boxMax.Z = points[0].Z;
for (int i = 1; i < points.Length; i++)
{
UpdateMinMaxQuick(points[i], boxMin, boxMax);
}

这是UpdateMinMaxQuick()方法源代码:

public static void UpdateMinMaxQuick(double x, double y, double z, Point3D min, Point3D max)
{
if (x < min.X)
min.X = x;
else if (x > max.X)
max.X = x;
if (y < min.Y)
min.Y = y;
else if (y > max.Y)
max.Y = y;
if (z < min.Z)
min.Z = z;
else if (z > max.Z)
max.Z = z;
}

您无法显著加快平均时间,但可以避免最坏的情况(对于提高坐标序列,您接近的每个坐标使用大约 2n 个比较(:

对于每对相邻元素,请比较它们,并根据对最小值和最大值检查全局最小值和最大值。此方法始终使用 3n/2 比较(每个坐标(。

if points[2*i].X > points[2*i+1].X:
if min.X > points[2*i+1].X:
min.X = points[2*i+1].X 
if max.X < points[2*i].X:
max.X = points[2*i].X 
else:
if min.X > points[2*i].X:
min.X = points[2*i].X 
if max.X < points[2*i+1].X:
max.X = points[2*i+1].X 

最新更新