C# STL文件的边界框体积

C# STL文件的边界框体积,c#,asp.net,3d,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 signed

我正在尝试使用以下代码查找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 };
    }
在此处输入代码
浮子的长度、宽度、高度;
浮点最小值=0,最大值=0,
miny=0,maxy=0,
minz=0,maxz=0;
公共双签名卷三角(浮点[]p1,浮点[]p2,浮点[]p3)
{
双v321=p3[0]*p2[1]*p1[2];
双v231=p2[0]*p3[1]*p1[2];
双v312=p3[0]*p1[1]*p2[2];
双v132=p1[0]*p3[1]*p2[2];
双v213=p2[0]*p1[1]*p3[2];
双v123=p1[0]*p2[1]*p3[2];
双卷=(1.0/6.0)*(-v321+v231+v312-v132-v213+v123);
if(数学最小值(数学最小值(p1[0],p2[0]),p3[0])maxx)
{
maxx=Math.Max(Math.Max(p1[0],p2[0]),p3[0]);
}
if(数学最小值(数学最小值(p1[1],p2[1]),p3[1])maxy)
{
maxy=Math.Max(Math.Max(p1[1],p2[1]),p3[1]);
}
if(数学最小值(数学最小值(p1[2],p2[2]),p3[2])maxz)
{
maxz=Math.Max(Math.Max(p1[2],p2[2]),p3[2]);
}
返回卷;
}
公共浮点[]getBoundingBox()
{
长度=最大值-最小值;
宽度=最大-最小;
高度=最大值-最小值;
返回新的float[]{length,width,height};
}
谢谢


ayha

删除所有
其他
。 在计算最小值之后,仍然需要计算最大值

另外,
getBoundingBox
仅返回aabb的维度
{length,width,height}
。其相对于
(minx,miny,minz)
的位置丢失


最后,确保全局变量已正确初始化,例如:
minx=+INFINITY
maxx=-INFINITY
,与
y
z
相同,删除所有
其他
。
在计算最小值之后,仍然需要计算最大值

另外,
getBoundingBox
仅返回aabb的维度
{length,width,height}
。其相对于
(minx,miny,minz)
的位置丢失


最后,确保全局变量已正确初始化,例如:
minx=+INFINITY
maxx=-INFINITY
,与
y
z

相同删除所有“else”后,结果相同。@ayha“else”肯定是个错误。除此之外,如何初始化全局值minx maxx miny maxy minz maxz?您应该编辑您的问题,而不是将代码作为注释发送。对于y和z,您不能将最小值和最大值设置为zerominx=+无穷大和maxx=-无穷大。无穷大是一个非常大的常数。去掉所有的“else”后,结果是一样的。@ayha“else”肯定是个错误。除此之外,如何初始化全局值minx maxx miny maxy minz maxz?您应该编辑您的问题,而不是将代码作为注释发送。对于y和z,您不能将最小值和最大值设置为zerominx=+无穷大和maxx=-无穷大。无穷大是一个非常大的常数。