Java获取几个浮点数的最小值和最大值

时间:2015-10-18 00:46:49

标签: java

我正在尝试创建一个轴对齐的边界框(aabb),并希望获得所有顶点坐标的最小值和最大值。

我正在从obj文件中读取以获取顶点坐标,打印输出将是浮点数中的x,y,z坐标列表。

float xVertices;
float yVertices;
float zVertices;

private void getObjVertices(String fileName)
{       
    BufferedReader meshReader = null;

    try
    {
        meshReader = new BufferedReader(new FileReader(fileName));
        String line;

        while((line = meshReader.readLine()) != null)
        {
            String[] tokens = line.split(" ");
            tokens = Util.RemoveEmptyStrings(tokens);

            if(tokens.length == 0 || tokens[0].equals("#") || 
                    tokens[0].equals("vt") || tokens[0].equals("vn") || tokens[0].equals("f"))
                continue;
            else if(tokens[0].equals("v"))
            {                                               
                xVertices = Float.parseFloat(tokens[1]);
                yVertices = Float.parseFloat(tokens[2]);
                zVertices =  Float.parseFloat(tokens[3]);

                System.out.println("xVertices:" + xVertices);
                System.out.println("yVertices:" + yVertices);
                System.out.println("zVertices:" + zVertices);

        // get min/max x,y,z values, calculatre width, height, depth
            }
        }           
        meshReader.close();
    }
    catch(Exception e)
    {
        e.printStackTrace();
        System.exit(1);
    }
}

我想要实现的是获得所有xVertices,yVertices,zVertices并找出每个轴中的哪个数字是greates,哪个是最小的。

有了这些信息,我就可以创建对撞机..有人知道如何在我的代码中计算greates和最小数字吗?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

您可以保留最大和最小数字的记录,并在程序读取顶点时更新它们。以下是一个例子。

float xMin, xMax, yMin, yMax, zMin, zMax;
    xMin = yMin = zMin = Float.MAX_VALUE;
    xMax = yMax = zMax = Float.MIN_VALUE;

    while ((line = meshReader.readLine()) != null) {
        String[] tokens = line.split(" ");
        tokens = Util.RemoveEmptyStrings(tokens);

        if (tokens.length == 0 || tokens[0].equals("#") ||
                tokens[0].equals("vt") || tokens[0].equals("vn") || tokens[0].equals("f"))
            continue;
        else if (tokens[0].equals("v")) {
            xVertices = Float.parseFloat(tokens[1]);
            yVertices = Float.parseFloat(tokens[2]);
            zVertices = Float.parseFloat(tokens[3]);

            if (xMin > xVertices) xMin = xVertices;
            if (yMin > yVertices) yMin = yVertices;
            if (zMin > zVertices) zMin = zVertices;

            if (xMax < xVertices) xMax = xVertices;
            if (yMax < yVertices) yMax = yVertices;
            if (zMax < zVertices) zMax = zVertices;

            System.out.println("xVertices:" + xVertices);
            System.out.println("yVertices:" + yVertices);
            System.out.println("zVertices:" + zVertices);

            // get min/max x,y,z values, calculatre width, height, depth
        }