已知下面数组
       i             j           k            i             j            k
     6941.10      2019.27      6630.50      7433.81      1957.73      6648.59 
     7350.81      1328.57      6688.23      6875.53      1371.42      6668.96 
     6941.10      2019.27      6671.98      7433.81      1957.73      6694.96 
     7350.81      1328.57      6732.24      6875.53      1371.42      6708.77 
这个数组组成了一个立方体,每三个值组成一个点的三维坐标,现在求这个立方体的边界值,即长、宽、高的最小值和最大值。

解决方案 »

  1.   

    就是分别求出i,j,k上的最大值和最小值
      

  2.   

    public class MaxMinLengthWidthHeight { public static void main(String[] args) { //所有顶点的三维坐标
    double[][] vertixDimensions=
    {
    {6941.10,2019.27,6630.50},
    {7350.81,1328.57,6688.23},
    {6941.10,2019.27,6671.98},
    {7350.81,1328.57,6732.24},
    {7433.81,1957.73,6648.59},
    {6875.53,1371.42,6668.96},
    {7433.81,1957.73,6694.96},
    {6875.53,1371.42,6708.77}

    };

    //任意取一个定点,不妨就取第一个
    double[] source=vertixDimensions[0];

    //长宽高中三者最小者的平方
    double minSquare=99999999;

    //长宽高中三者次小者的平方
    double secondMinSquare=99999999;

    //某个定点到最远顶点的距离的平方
    double maxDistanceSquare=0;

    //对每个定点求它到给定点的距离的平方
    for(int i=1;i<vertixDimensions.length;i++)
    {
    double[] target=vertixDimensions[i];
    double distanceFromSourceToTargetSquare=
    (source[0]-target[0])*
    (source[0]-target[0])+
    (source[1]-target[1])*
    (source[1]-target[1])+
    (source[2]-target[2])*
    (source[2]-target[2]);

    //如果比最小值小
    if(minSquare>distanceFromSourceToTargetSquare)
    {
    //次小值等于最小值
    secondMinSquare=minSquare;
    //最小值等于求出值
    minSquare=distanceFromSourceToTargetSquare;
    }
    //如果比最小值大,比次小值小
    else if(secondMinSquare>distanceFromSourceToTargetSquare)
    {
    //次小值等于求出值
    secondMinSquare=distanceFromSourceToTargetSquare;
    }

    //如果比最大值大
    if(maxDistanceSquare<distanceFromSourceToTargetSquare)
    {
    //最大值等于求出值
    maxDistanceSquare=distanceFromSourceToTargetSquare;
    }
    }

    //输出长宽高
    System.out.println("Length:"+Math.sqrt(maxDistanceSquare-minSquare-secondMinSquare));
    System.out.println("Width:"+Math.sqrt(secondMinSquare));
    System.out.println("Height:"+Math.sqrt(minSquare));
    }}