已知下面数组
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
这个数组组成了一个立方体,每三个值组成一个点的三维坐标,现在求这个立方体的边界值,即长、宽、高的最小值和最大值。
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
这个数组组成了一个立方体,每三个值组成一个点的三维坐标,现在求这个立方体的边界值,即长、宽、高的最小值和最大值。
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));
}}