簡體   English   中英

邊界框計算

[英]Bounding box computation

我們的包圍盒計算算法就是這樣實現的。 我們還可以采取其他措施來提高速度嗎? 還是解決相同問題的另一種方法?

謝謝。

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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM