题目
在一个 XY 坐标系中有一些点,我们用数组 coordinates 来分别记录它们的坐标,其中 coordinates[i] = [x, y] 表示横坐标为 x、纵坐标为 y 的点。
请你来判断,这些点是否在该坐标系中属于同一条直线上,是则返回 true,否则请返回 false。
注意事项
1.本题思路并不复杂,但是计算过程中要注意首先被除数不能是0,其次int类型在除法运算中会取整,而float类型又经常失去精度,所以使用乘法来代替一般思路中的除法计算.
2.用斜率来判断点是否在一条直线上,设三点坐标分别为(x1,y1)(x2,y2)(x3,y3),那么斜率相等就等价于
(x2-x1)(y3-y2)=(x3-x2)(x2-x1)
public boolean checkStraightLine(int[][] coordinates) {
int len = coordinates.length;
for (int i = 1; i < len - 1; ++i) {
int y1 = coordinates[i][1] -coordinates[i-1][1];
int x1 = coordinates[i][0] -coordinates[i-1][0];
int y2 = coordinates[i+1][1] -coordinates[i][1];
int x2 = coordinates[i+1][0] -coordinates[i][0];
if (y1*x2 != y2*x1) {
return false;
}
}
return true;
}
}
下面是用来获取二维数组的main方法
public static void main(string[]args){
Scanner scan=new Scanner(System.in);
System.out.println("请输入二维数组的行数")
int row=scan.nextInt;
System.out.println("请输入二维数组的列数")
int col=scan.nextInt;
int[][] coordinates=new [row][col];
System.out.println("请输入二维数组的值")
for(int i=0;i<row;i++){
for(int j=0;j<col;j++)
coordinates[row][col]=scan.nextInt();
solution sol=new solution();
sol.checkStraightLine(coordinates);
}