今天无聊打打java程序,遇到了判断多个点是否在同一直线的问题,当时第一反应就是采用倒推法,先确定方程,再判断y==tx+c。这公式一时还想不起来,一元一次方程小学学的吧,看来把50%交给老师了。。。
最重要的,是确定t和c,经过运算,发现如下:
t=(y2-y1)/(x2-x1)
c=(x2*y1-x1*y2)/(x2-x1)
然后就简单了,下面是主要算法:
int sets=3,row=4,col=2;
double[][][] set=new double[sets][row][col];
for(int i=0;i<sets;i++){
for(int j=0;j<row;j++){
for(int k=0;k<col;k++)
set[i][j][k]=FelcxTools.getFileScanner().nextDouble();
}
}
boolean[] isLines=new boolean[sets];
for(int i=0;i<sets;i++){
double x1=set[i][0][0];
double y1=set[i][0][1];
double x2=set[i][1][0];
double y2=set[i][1][1];
double t=(y2-y1)/(x2-x1);
double c=(x2*y1-x1*y2)/(x2-x1);
boolean isLine=true;
for(int j=2;j<row;j++){
double x=set[i][j][0];
double y=set[i][j][1];
if(y!=t*x+c){
isLine=false;
break;
}
}
isLines[i]=isLine;
}
for(boolean cell :isLines){
System.out.println(cell);
}
just so so