我正在尝试使用以下代码查找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
答案 0 :(得分:1)
删除所有else
。
计算分钟后,您仍然需要计算最大值
此外,getBoundingBox
仅返回aabb的维度{ length, breadth, height }
。它相对于(minx, miny, minz)
的位置丢失了。
最后,确保您的全局变量已正确初始化,例如:minx=+INFINITY
和maxx=-INFINITY
,y
和z
相同。