求三维空间中距离最近的两点
程序员文章站
2022-04-03 23:20:07
...
求三维空间中距离最近的两点
最近的一个java作业,觉得写的还行,值得注意的是可能有几组点的距离最小且相等。
-
import java.util.Scanner;
-
public class Distance {
-
public static double compute(double[] a,double[] b){
-
double[] c=new double[3];
-
c[0]=Math.pow(a[0]-b[0],2);
-
c[1]=Math.pow(a[1]-b[1],2);
-
c[2]=Math.pow(a[2]-b[2],2);
-
c[0]=Math.sqrt(c[0]+c[1]+c[2]);
-
//其实这里不用开方,不过这题不要求效率,所以还是开方了好看一些
-
return c[0];
-
}
-
public static int[] getmin(double[] a){
-
int[] n=new int[100];
-
n[0]=1;
-
//n[0]用来存储距离相同且最小的组数
-
double min=a[0];
-
for(int i=1;i<a.length;i++){
-
if(a[i]==min){
-
n[n[0]+1]=i;
-
n[0]++;
-
}else if(a[i]<min){
-
n[0]=1;
-
n[1]=i;
-
min=a[i];
-
}
-
}
-
return n;
-
}
-
public static void main(String[] args) {
-
//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}};
-
System.out.println("请在第一行输入你将输入的点数n,接下来n行,每行输入一个点的坐标");
-
double[][] points=new double[1000][1000];
-
Scanner input=new Scanner(System.in);
-
int number=input.nextInt();
-
int h=0;
-
while(number!=h){
-
points[h][0]=input.nextDouble();
-
points[h][1]=input.nextDouble();
-
points[h][2]=input.nextDouble();
-
h++;
-
}
-
int arr=number*(number-1)/2;
-
double[] result=new double[arr];
-
int[] x=new int[arr];
-
int[] y=new int[arr];
-
int index=0;
-
int[] minIndex=new int[100];
-
for(int i=0;i<number-1;i++)
-
for(int j=i+1;j<number;j++){
-
result[index]= compute(points[i],points[j]);
-
x[index]=i;
-
y[index]=j;
-
index++;
-
}
-
minIndex=getmin(result);
-
System.out.println("共有"+minIndex[0]+"组点距离最小且相同");
-
for(int k=0;k<minIndex[0];k++){
-
System.out.println("第"+(k+1)+"组的两点为:"+points[x[minIndex[k+1]]][0]+","+points[x[minIndex[k+1]]][1]+","+points[x[minIndex[k+1]]][2]);
-
System.out.println(" "+points[y[minIndex[k+1]]][0]+","+points[y[minIndex[k+1]]][1]+","+points[y[minIndex[k+1]]][2]);
-
}
-
}
-
}
代码仅供参考,共同学习!
上一篇: OpenGL(三)之Qt窗口(QOpenGLWidget)
下一篇: 三维空间的点(继承)