C# STL文件的边界框体积
我正在尝试使用以下代码查找STL文件的边界框体积。对于大多数文件,它工作正常,但对于文件,它会给出奇怪的结果,这意味着非常高的X、Y和Z值。请帮我修一下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
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=-无穷大。无穷大是一个非常大的常数。