STL文件的边界框体积

时间:2013-07-21 19:22:13

标签: c# asp.net 3d

我正在尝试使用以下代码查找STL文件的边界框音量。对于大多数文件,它工作正常,但对于文件,它给出了奇怪的结果,意味着非常高的X,Y和Z值。请帮我解决。

enter code here

    float length, breadth, height;
            float minx = 0, maxx = 0,
            miny=0, maxy=0,
            minz=0, maxz=0;


     public double signedVolumeOfTriangle(float[] p1, float[] p2, float[] p3)
    {
        double v321 = p3[0] * p2[1] * p1[2];
        double v231 = p2[0] * p3[1] * p1[2];
        double v312 = p3[0] * p1[1] * p2[2];
        double v132 = p1[0] * p3[1] * p2[2];
        double v213 = p2[0] * p1[1] * p3[2];
        double v123 = p1[0] * p2[1] * p3[2];
        double vol = (1.0 / 6.0) * (-v321 + v231 + v312 - v132 - v213 + v123);


        if (Math.Min(Math.Min(p1[0], p2[0]), p3[0]) < minx)
        {
            minx = Math.Min(Math.Min(p1[0], p2[0]), p3[0]);
        }
        else if (Math.Max(Math.Max(p1[0], p2[0]), p3[0]) > maxx)
        {
            maxx = Math.Max(Math.Max(p1[0], p2[0]), p3[0]);
        }


        if (Math.Min(Math.Min(p1[1], p2[1]), p3[1]) < miny)
        {
            miny = Math.Min(Math.Min(p1[1], p2[1]), p3[1]);
        }
        else if (Math.Max(Math.Max(p1[1], p2[1]), p3[1]) > maxy)
        {
            maxy = Math.Max(Math.Max(p1[1], p2[1]), p3[1]);
        }

        if (Math.Min(Math.Min(p1[2], p2[2]), p3[2]) < minz)
        {
            minz = Math.Min(Math.Min(p1[2], p2[2]), p3[2]);
        }
        else if (Math.Max(Math.Max(p1[2], p2[2]), p3[2]) > maxz)
        {
            maxz = Math.Max(Math.Max(p1[2], p2[2]), p3[2]);
        }

        return vol;
    }

    public float[] getBoundingBox()
    {
        length = maxx - minx;
        breadth = maxy - miny;
        height = maxz - minz;
        return new float[] { length, breadth, height };
    }

由于

ayha

1 个答案:

答案 0 :(得分:1)

删除所有else。 计算分钟后,您仍然需要计算最大值

此外,getBoundingBox仅返回aabb的维度{ length, breadth, height }。它相对于(minx, miny, minz)的位置丢失了。

最后,确保您的全局变量已正确初始化,例如:minx=+INFINITYmaxx=-INFINITYyz相同。