欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

求三维空间中距离最近的两点

程序员文章站 2022-04-03 23:20:07
...

求三维空间中距离最近的两点

         最近的一个java作业,觉得写的还行,值得注意的是可能有几组点的距离最小且相等。

        

  1. import java.util.Scanner;
  2. public class Distance {
  3. public static double compute(double[] a,double[] b){
  4. double[] c=new double[3];
  5. c[0]=Math.pow(a[0]-b[0],2);
  6. c[1]=Math.pow(a[1]-b[1],2);
  7. c[2]=Math.pow(a[2]-b[2],2);
  8. c[0]=Math.sqrt(c[0]+c[1]+c[2]);
  9. //其实这里不用开方,不过这题不要求效率,所以还是开方了好看一些
  10. return c[0];
  11. }
  12. public static int[] getmin(double[] a){
  13. int[] n=new int[100];
  14. n[0]=1;
  15. //n[0]用来存储距离相同且最小的组数
  16. double min=a[0];
  17. for(int i=1;i<a.length;i++){
  18. if(a[i]==min){
  19. n[n[0]+1]=i;
  20. n[0]++;
  21. }else if(a[i]<min){
  22. n[0]=1;
  23. n[1]=i;
  24. min=a[i];
  25. }
  26. }
  27. return n;
  28. }
  29. public static void main(String[] args) {
  30. //double[][] points={{-1,0,3},{-1,-1,-1},{4,1,1},{2,0.5,9},{3.5,2,-1},{3,1.5,3},{-1,4,2},{5.5,4,-0.5}};
  31. System.out.println("请在第一行输入你将输入的点数n,接下来n行,每行输入一个点的坐标");
  32. double[][] points=new double[1000][1000];
  33. Scanner input=new Scanner(System.in);
  34. int number=input.nextInt();
  35. int h=0;
  36. while(number!=h){
  37. points[h][0]=input.nextDouble();
  38. points[h][1]=input.nextDouble();
  39. points[h][2]=input.nextDouble();
  40. h++;
  41. }
  42. int arr=number*(number-1)/2;
  43. double[] result=new double[arr];
  44. int[] x=new int[arr];
  45. int[] y=new int[arr];
  46. int index=0;
  47. int[] minIndex=new int[100];
  48. for(int i=0;i<number-1;i++)
  49. for(int j=i+1;j<number;j++){
  50. result[index]= compute(points[i],points[j]);
  51. x[index]=i;
  52. y[index]=j;
  53. index++;
  54. }
  55. minIndex=getmin(result);
  56. System.out.println("共有"+minIndex[0]+"组点距离最小且相同");
  57. for(int k=0;k<minIndex[0];k++){
  58. System.out.println("第"+(k+1)+"组的两点为:"+points[x[minIndex[k+1]]][0]+","+points[x[minIndex[k+1]]][1]+","+points[x[minIndex[k+1]]][2]);
  59. System.out.println(" "+points[y[minIndex[k+1]]][0]+","+points[y[minIndex[k+1]]][1]+","+points[y[minIndex[k+1]]][2]);
  60. }
  61. }
  62. }

代码仅供参考,共同学习!