Java黑皮书课后题第8章:*8.7(距离最近的两个点)程序清单8-3给出了找到二维空间中距离最近的两个点的程序。修改该程序,让程序能找出在三维空间上距离最近的两个点

*8.7(距离最近的两个点)程序清单8-3给出了找到二维空间中距离最近的两个点的程序。修改该程序,让程序能找出在三维空间上距离最近的两个点

  • 题目
    • 题目描述
  • 代码
    • 结果

题目

题目描述

*8.7(距离最近的两个点)程序清单8-3给出了找到二维空间中距离最近的两个点的程序。修改该程序,让程序能找出在三维空间上距离最近的两个点
使用下面的点来测试这个程序:
double[][] points = { {-1, 0, 3}, {-1, -1, -1}, {4, 1, 1},
{2, 0.5, 9}, {3.5, 2, -1}, {3, 1.5, 3}, {-1.5, 4, 2},
{5.5, 4, -0.5} };
计算两个点(x1, y1, z1)到(x2, y2, z2)的距离公式:
Math.sqrt( Math.pow(x2-x1, 2) + Math.pow(y2-y1, 2) + Math.pow(z2- z1, 2) )

代码

package blackbook.chapter8;import java.util.Arrays;public class Test8_7 {public static void main(String[] args) {//1. 主方法:创建声明初始化points数组,复制题目给定语句即可double[][] points = {{  -1,  0, 3},{  -1, -1, -1},{   4,   1, 1},{   2, 0.5, 9},{ 3.5, 2, -1},{   3, 1.5, 3},{-1.5, 4, 2},{ 5.5, 4, -0.5}};//2. 主方法:新建一个double对象用于存储最小值、两个一维数组用于存储最大值的两端坐标值,使用循环比较保存了所有点间距离的数组所有元素double temp_ij = 0;double temp_min = distance(points[0], points[1]);double[] min_point1 = new double[3];double[] min_point2 = new double[3];for (int i = 0 ; i < points.length - 1; i++){for (int j = i + 1 ; j < points.length ; j++){temp_ij = distance(points[i], points[j]);if ( temp_min > temp_ij ){temp_min = temp_ij;min_point1 = points[i];min_point2 = points[j];}}}//5. 主方法:将上面的两个一维数组坐标值输出System.out.println(Arrays.toString(min_point1) + "\n" + Arrays.toString(min_point2));}//3. 自定义方法distance:接收传入的两个数组,作为两点的坐标public static double distance(double[] a, double[] b){//4. 自定义方法distance:将两个数组对应元素平方并求和,使用两点距离公式求出距离并返回double temp_distance = 0;for (int i = 0; i < a.length ; i++){temp_distance += Math.pow(b[i] - a[i], 2);}return Math.sqrt(temp_distance);}
}

结果

[4.0, 1.0, 1.0]
[3.5, 2.0, -1.0]


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部